1. 程式人生 > >uva12108 特別困的學生 紫書4-8

uva12108 特別困的學生 紫書4-8

打了兩個小時war3 心疼自己少做了一道題。那就不打了,開始做題吧。

uva12108 特別困的學生 紫書4-8

這題我一開始看覺得好難呀。後面跟同學邊聊天邊寫(打字聊天,我打字快)然後寫完了。然後樣例輸出時間為18,我是17,我就沒細想,把我時間初始值加1.(原因是因為題目的初始意思就是t=1)然後呢不是要輸出-1,如果不存在清醒時刻的話。
我覺得可能和公倍數有關,但我還是由於分心,沒有細想,設定了個t如果大於10000就break輸出-1。
結果竟然一次ac。。。

大致思路用了個結構體,用結構體來儲存每個學生的資訊又簡單又方便。
以後要記得。臨界點上我揣摩了很久,後面也沒想,先輸出看看。然後再微調結果,結果過了。
呃呃呃,這題真是看著難,做著無比順暢,程式碼也就那麼一點點,還一次ac

放程式碼

#include<stdio.h>
int kase=0;
 struct student {int a,b,c;}s[11];
int cir(int n)
{ int sub=0;
     for(int i=0;i<n;i++)
            {
                if(s[i].c>s[i].a)sub++;
            }
            return sub;
}
int main()
{
//    freopen("input.txt","r",stdin);
    int n,t=1;
        hey:
    while(scanf("%d",&n)==1&&n)
    { t=1;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].c);

        }
        for(;;)
        {
            int sub=2*cir(n);
           if(sub>n)
           {    for(int i=0;i<n;i++)
                {
                    if(s[i].c==(s[i].a+s[i].b)){s[i].c=1;}
                    else s[i].c+=1;

                }
           }
           else {
              for(int i=0;i<n;i++)
              {
                  if(s[i].c==s[i].a){s[i].c=1;}
                  else if(s[i].c==(s[i].a+s[i].b)){s[i].c=1;}
                  else s[i].c+=1;
              }
           }
           t++;
           if(cir(n)==0)break;
           if(t>10000){printf("Case %d: -1\n",++kase);goto hey;}
        }
        printf("Case %d: %d\n",++kase,t);

    }
    return 0;
}

ok,如果不是因為打了war3,我可能明天就可以學第五章了!!!!