PTA---1058 選擇題(C語言+模擬)

2020-08-13 11:45:26

PTA—1058 選擇題

**

題目直達鏈接點我

**
關於這道題,就是字元處理起來有點麻煩,然後思路就按照題目所給的意思來就行了…
下面 下麪講下這道題字元怎麼讀
就兩點(都是輸入的)

  1. 第一個就是輸入答案那塊,我們肯定是不能一次性都把那幾個選項全部讀完的,所以用一個字元變數讀(不是字串),然後它會讀入空格(這是件很惱火的事)…,然後我們就需要判斷是不是空格(廢話),如果是就continue,這裏如果使用for回圈的話,增量在for表達式中,continue以後,增量是會增加的,所以不能把增量寫在for裏面…就是這樣咯
  2. 第二個就是輸入學生答案那塊…那個括號傷腦筋…每次輸入一道題答案括號後面有一個空格或者是回車,所以需要一個getchar()清理…
    這題大概也就這些…
    上程式碼

AC程式碼

#include <stdio.h>
struct pro
{
    int alls;                   //滿分
    int sel;                    //選項數
    int corsel;                 //正確選項數
    char xx[6];                 //選項
};
int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    
    struct pro a[105];
    int i,j;
    for(i=0;i<m;i++)
    {
        scanf("%d %d %d",&a[i].alls,&a[i].sel,&a[i].corsel);
        for(j=0;j<a[i].corsel;)
        {
        	char c = getchar();
        	if(c != ' ')
			a[i].xx[j++] = c;
		}
        
        a[i].xx[j] = '\0';
    }
    
    int cuoti[105] = {0};                       //錯題統計
    int stu[1005] = {0};                        //學生成績
    int max1 = 0;                            //錯題最多的編號
    getchar();
    for(i=0;i<n;i++)
    {
        char c;
        int x,flag = 0,k;
    	
        for(k=0;k<m;k++)                //題目
        {
        	flag = 0;
        	scanf("(%d ",&x);
            for(j=0;j<x;)            //輸入選項
            {
                c = getchar();
                if(c == ' ')
                continue;
                
                if(x != a[k].corsel)            //輸入錯誤的個數
                    flag = 1;
                else                        //相同個數
                    if(a[k].xx[j] != c)         //不同選項
                        flag =  1;
                j++;
            }
            scanf(")");
            c = getchar();
            if(flag)
            {
                 cuoti[k]++;
                if(cuoti[k] > cuoti[max1])
                    max1 = k;
            }
            else
                stu[i] += a[k].alls;
        }
    }
    for(i=0;i<n;i++)
        printf("%d\n",stu[i]);
    
    if(cuoti[max1] == 0)
        printf("Too simple");
    else
    {
        printf("%d",cuoti[max1]);
        for(i=0;i<m;i++)
            if(cuoti[max1] == cuoti[i])
                printf(" %d",i+1);
    }
    return 0;
}

------------------------------------------------------------------------------------end