现在的位置: 首页 > 综合 > 正文

Uva 上自己AC 的题目

2013年09月17日 ⁄ 综合 ⁄ 共 24332字 ⁄ 字号 评论关闭

299 - Train Swapping

列车交换

简单的排序统计问题

#include<string.h>

#include<stdio.h>

 

int main()

{

    freopen("1.txt","r",stdin);

    int n,l,i,j,k;

    int num[51],temp,count=0;

    while(scanf("%d",&n)!=EOF)

    {

        for(i=0;i<n;i++)

        {

            scanf("%d",&l);

            for(j=0;j<l;j++)

                scanf("%d",&num[j]);

            for(j=1;j<=l-1;j++)

                for(k=0;k<l-j;k++)

                    if(num[k]>num[k+1])

                    {

                        temp=num[k+1];

                        num[k+1]=num[k];

                        num[k]=temp;

                        count++;

                    }

            printf("Optimal train swapping takes %d swaps.

 

/n",count);

            count=0;

        }

    }

    return 0;

}

 

10420 - List of Conquests

征服列表简单的排序比较问题

#include<string.h>

#include<stdio.h>

#include<stdlib.h>

 

int cmp_string(const void*_a,const void*_b)

{

    char* a=(char*)_a;

    char* b=(char*)_b;

    return strcmp(a,b);

}

int main()

{

    freopen("1.txt","r",stdin);

    int n,i,j,num[2000];

    char country[2000][70];

    char line[100];

    scanf("%d",&n);

    getchar();

    for(i=0;i<n;i++)

    {

        gets(line);

        num[i]=1;

        for(j=0;j<strlen(line);j++)

        if(line[j]==' ')

        country[i][j]='/0';

        else

        country[i][j]=line[j];

    }

    qsort(country,n,sizeof(country[0]),cmp_string);

    for(i=0;i<n;i++)

        for(j=i+1;j<n;j++)

        if(strcmp(country[i],country[j])==0)

        {num[i]++;country[j][0]='/0';}

    for(i=0;i<n;i++)

    if(strlen(country[i])>=1)

    printf("%s %d/n",country[i],num[i]);

return 0;

}

 

537 - Artificial Intelligence?

#include<string.h>

#include<stdio.h>

 

int main()

{

 

    freopen("1.txt","r",stdin);

    int n,len,i,j,num=1;

    char c1,c2,prefix,ch;

    float f1,f2;

  scanf("%d/n",&n);

    for(i=1;i<=n;i++)

    {

 

       while(1)

       {

           ch=getchar();

           if(ch=='=')break;

           c1=ch;

       }

        scanf("%f%c",&f1,&prefix);

        if(prefix=='m') f1/=1000;

        else if(prefix=='k') f1*=1000;

        else if(prefix=='M') f1*=1000000;

         while(1)

       {

           ch=getchar();

           if(ch=='=')break;

           c2=ch;

       }

        scanf("%f%c",&f2,&prefix);

        if(prefix=='m') f2/=1000;

        else if(prefix=='k') f2*=1000;

        else if(prefix=='M') f2*=1000000;

        printf("Problem #%d/n",num++);

        if((c1=='U'&&c2=='I')||(c1=='I'&&c2=='U'))

            printf("P=%.2fW/n/n",f1*f2);

        else if(c1=='P'&&c2=='I')

                printf("U=%.2fV/n/n",f1/f2);

             else if(c2=='P'&&c1=='I')

                    printf("U=%.2fV/n/n",f2/f1);

                  else if(c1=='P'&&c2=='U')

                        printf("I=%.2fA/n/n",f1/f2);

                        else if(c2=='P'&&c1=='U')

                            printf("I=%.2fA/n/n",f2/f1);

 

 

    }

    return 0;

}

 

10010 - Where's Waldorf?

简单的暴力算法

关键点在输出格式

每个情况的最后一种情况不输出空格

#include<stdio.h>

#include<string.h>

 

char aim[51][51],test[51];

int same1(int i0,int j0,int len)

{

    int i,j,k=0;

    for(i=i0,j=j0;k<len;k++,j++)

        if(aim[i][j]!=test[k])

        return 0;

    return 1;

    }

int same2(int i0,int j0,int len)

{

    int i,j,k=0;

    for(i=i0,j=j0;k<len;k++,i++)

        if(aim[i][j]!=test[k])

        return 0;

    return 1;

    }

int same3(int i0,int j0,int len)

{

    int i,j,k=0;

    for(i=i0,j=j0;k<len;k++,j--)

        if(aim[i][j]!=test[k])

        return 0;

    return 1;

    }

int same4(int i0,int j0,int len)

{

    int i,j,k=0;

    for(i=i0,j=j0;k<len;k++,i--)

        if(aim[i][j]!=test[k])

        return 0;

    return 1;

    }

int same5(int i0,int j0,int len)

{

    int i,j,k=0;

    for(i=i0,j=j0;k<len;k++,i++,j++)

        if(aim[i][j]!=test[k])

        return 0;

    return 1;

    }

int same6(int i0,int j0,int len)

{

    int i,j,k=0;

    for(i=i0,j=j0;k<len;k++,i++,j--)

        if(aim[i][j]!=test[k])

        return 0;

    return 1;

    }

int same7(int i0,int j0,int len)

{

    int i,j,k=0;

    for(i=i0,j=j0;k<len;k++,i--,j++)

        if(aim[i][j]!=test[k])

        return 0;

    return 1;

    }

int same8(int i0,int j0,int len)

{

    int i,j,k=0;

    for(i=i0,j=j0;k<len;k++,i--,j--)

        if(aim[i][j]!=test[k])

        return 0;

    return 1;

    }

 

int main()

{

    freopen("1.txt","r",stdin);

    int i,j,k,s,len,g;

    int num_1,num_2,num_3,num_4;

    while(scanf("%d",&num_1)!=EOF)

    {

        for(i=0;i<num_1;i++)

        {

            scanf("%d %d",&num_2,&num_3);

            for(j=0;j<num_2;j++)

            scanf("%s",aim[j]);

            for(j=0;j<num_2;j++)

                for(k=0;k<num_3;k++)

                    if(aim[j][k]>='A'&&aim[j][k]<='Z')

                        aim[j][k]+=32;

                scanf("%d",&num_4);

            for(j=0;j<num_4;j++)

            {

                scanf("%s",test);

                len=strlen(test);

                for(k=0;k<strlen(test);k++)

                    if(test[k]>='A'&&test[k]<='Z')

                        test[k]+=32;

 

             for(k=0;k<num_2;k++)

                    for(s=0;s<num_3;s++)

                        if(aim[k][s]==test[0])

                        {

                          if(same1(k,s,len))

                            {printf("%d %d/n",k+1,s+1);goto 

 

a;}

                            if(same2(k,s,len))

                            {printf("%d %d/n",k+1,s+1);goto 

 

a;}

                            if(same3(k,s,len))

                            {printf("%d %d/n",k+1,s+1);goto 

 

a;}

                             if(same4(k,s,len))

                            {printf("%d %d/n",k+1,s+1);goto 

 

a;}

                             if(same5(k,s,len))

                            {printf("%d %d/n",k+1,s+1);goto 

 

a;}

                             if(same6(k,s,len))

                            {printf("%d %d/n",k+1,s+1);goto 

 

a;}

                             if(same7(k,s,len))

                            {printf("%d %d/n",k+1,s+1);goto 

 

a;}

                             if(same8(k,s,len))

                            {printf("%d %d/n",k+1,s+1);goto 

 

a;}

                        }

              a: g++;

            }

        if(i<num_1-1)

            printf("/n");

        }

 

    }

    return 0;

}

 

Problem E: Automatic Editing

有点乱但思路是对的

原理就是查找替换

#include<stdio.h>

#include<string.h>

 

char in[260],temp[260];

char rules[11][82],replace[11][82];

int find_replace(char* s,char* ru,char* rep)

{

    int lena=strlen(s);

    int lenb=strlen(ru);

    int lenc=strlen(rep);

    int i,j,t,k;

    for(i=0,j=0;i<lena-lenb+1;)

    {

        k=i;

        while(k<lena&&j<lenb)

        {

            if(s[k++]!=ru[j++])

            {

                i++;j=0;

                break;

            }

        }

        if(j==lenb)

        {

            for(t=0;t<i;t++)

            {

                temp[t]=s[t];

 

            }

            for(j=0;j<lenc;j++)

            {

                temp[t++]=rep[j];

 

            }

            for(;k<lena;k++)

            {

                temp[t++]=s[k];

 

            }

            temp[t]='/0';

            strcpy(s,temp);

 

            i=0;lena=strlen(s);j=0;

        }

    }

    return 0;

}

int main()

{

freopen("1.txt","r",stdin);

    int num;

    while(scanf("%d",&num)&&num!=0)

    {

        getchar();

 

        int i;

        for(i=0;i<num;i++)

        {

            gets(rules[i]);

 

            gets(replace[i]);

 

        }

 

        gets(in);

 

        i=0;

        for(i=0;i<num;i++)

        {

            find_replace(in,rules[i],replace[i]);

 

        }

        printf("%s/n",in);

    }

    return 0;

}

409 - Excuses, Excuses!

交了很多遍一直runtime error

没法只好重做,因为思路是对的所以就该对了

 

#include <stdio.h>

#include <string.h>

#define N 25

 

int m,n;

char s[N][N],ss[80];

char str[N][80];

int num[N];

int Max;

int find()

{

    int i;

   for(i = 1; i <= m; i++)

      if(!strcmp(s[i],ss))return 1;

   return 0;

}

 

int main()

{

    freopen("1.txt","r",stdin);

   int c = 0,len;

   char ch;

   int i,j,top,max;

   while(scanf("%d%d",&m,&n) != EOF)

   {

      for(i = 1; i <= m; i++)

         scanf("%s",s[i]);

      getchar();

      top = 0;

      Max = 0;

      for(i = 1; i <= n; i++)

      {

         gets(str[i]);

         num[i] = 0;

         len = strlen(str[i]);

         top = 0;

         for(j = 0; j < len; j++)

         {

            ch = str[i][j];

            if(ch >= 'A' && ch <= 'Z')ch += 32;

            if(ch >= 'a' && ch <= 'z')

               ss[top++] = ch;

            else if(top)

               {

                  ss[top] = '/0';

                  if(find())num[i]++;

                  top = 0;

               }

               else

                  continue;

         }

         if(num[i] > Max)Max = num[i];

      }

      printf("Excuse Set #%d/n",++c);

      for(i = 1; i <= n; i++)

         if(num[i] == Max)

            puts(str[i]);

      putchar('/n');

   }

return 0;

 

}

 

 

 

 

这题一开始时,总是Runtime Error,怎么也不知错在哪里?后来,我向

 

高人请教。一开始时他也Runtime Error,但他后来AC了。他告诉我,是

 

数组开小了,开辟到100000就行了。为什么呢,因为题目中有隐藏的细节

 

,就是:有重复的单词可能使单词个数远超过5000,5000只是最后去重的

 

结果。

 

这个细节我怎么也没注意到,我问他怎么看到的;他回答说是从题目中看

 

到的。最后,他教导我说:学这么长时间了,还是训练不到位,继续努力

 

 

   我想问他,怎么个努力,可我没说。我想至于努力那是你自己事情,

 

自己的事情自己解决!

 

从这题中我们受到的启发,就是认真读题,对于数据问题,要分析清楚,

 

往往这正是出题人的意图。

 

AC Code

 

/*

 

C Source Code

 

By Ahshua

 

Time: 22:03:59 29.06.2010

 

*/

 

#include <stdio.h>

 

#include <ctype.h>

 

#include <stdlib.h>

 

#include <string.h>

 

char d[100010][210]={'/0'};

 

int n=0,len=0;

 

int cmp_string(const void* _a,const void* _b)

 

{

 

    char* a= (char*)_a;

 

    char* b= (char*)_b;

 

    return strcmp(a,b);

 

}

 

int main()

 

{

 

    char ch;

 

    while(1)

 

    {

 

       if((ch=getchar())==EOF) break;

 

       if(isalpha(ch))

 

          d[n][len++]=tolower(ch);

 

       else

 

          if(isalpha(d[n][0])){ d[n++][len]='/0';len=0; }

 

    }

 

    qsort(d,n,sizeof(d[0]),cmp_string);

 

    for(int i=0;i<n;i++)

 

       if(strcmp(d[i],d[i+1]))

 

          printf("%s/n",d[i]);

 

    return 0;

 

}

644 - Immediate Decodability

原理是排序比较

#include<stdio.h>

#include<string.h>

 

int is_ok(char b[10][12],int num )

{

    int i,j,k,place;

     for(i=0;i<num;i++)

     {

        for(j=i+1;j<num;j++)

           {

            for(k=0;k<strlen(b[i]);k++)

                if(b[i][k]!=b[j][k])

                    {place=0;break;}

                else place=1;

            if(place) return 1;

           }

     }

     return 0;

}

int main()

{

    freopen("1.txt","r",stdin);

    int i=0,j=0,num,ok,k=1;

    char a[12],temp[12],b[10][12];

    while(scanf("%s",b[i])!=EOF)

    {

        if(b[i][0]!='9')

            i++;

        else

        {

            num=i;

          for(i=0;i<num;i++)

            for(j=i+1;j<num;j++)

                if(strlen(b[i])>strlen(b[j]))

                {

                    strcpy(temp,b[j]);

                    strcpy(b[j],b[i]);

                    strcpy(b[i],temp);

                }

          if(is_ok(b,num )==0)

            printf("Set %d is immediately decodable/n",k++);

          else

            printf("Set %d is not immediately decodable/n",k

 

++);

          num=0;i=0;

        }

 

    }

 

    return 0;

}

 

自动诗

 10361 - Automatic Poetry

#include<stdio.h>

#include<string.h>

#define N 100

 

int main()

{

 

    int num,i,j,k;

    int mark[5];

    char ch1[N],ch2[N],s1[N],s2[N],temp1[N],temp2[N];

    while(scanf("%d",&num)!=EOF)

    {

        getchar();

        for(i=0;i<num;i++)

        {

            gets(ch1);

            gets(ch2);

            k=0;

            for(j=0;j<strlen(ch1);j++)

                if(ch1[j]!='<'&&ch1[j]!='>')

                    printf("%c",ch1[j]);

                else

                    {mark[k]=j;k++;}

            printf("/n");

 

            k=0;

            for(j=mark[0]+1;j<mark[1];j++)

                {temp1[k]=ch1[j];k++;}

            for(j=mark[3]+1;j<strlen(ch1);j++)

                {temp1[k]=ch1[j];k++;}

                temp1[k]='/0';

            k=0;

            for(j=mark[2]+1;j<mark[3];j++)

                {temp2[k]=ch1[j];k++;}

            for(j=mark[1]+1;j<mark[2];j++)

                 {temp2[k]=ch1[j];k++;}

                temp2[k]='/0';

 

             for(j=0;j<strlen(ch2);j++)

                if(ch2[j]!='.')

                printf("%c",ch2[j]);

                else break;

            printf("%s%s/n",temp2,temp1);

        }

    }

return 0;

}

 

465 - Overflow

主要问题是理清思路逻辑问题

核心是大数加法和大数乘法

 

#include<stdio.h>

#include<string.h>

#define N 500

 

void GetDigits(int *a, char *s)

{

   int i;

   char digit;

   int len=strlen(s);

   for(i=0;i<N;i++)

    *(a+i)=0;

   for(i=0;i<len;i++)

        *(a+len-i-1) = *(s+i) - '0';

 

}

 

int main()

{

 

    int i,j,k,first,second,mulresult,addresult;

    char ch[2];

    char a0[N],e0[N],a[N],e[N],ss[N*N],m[11]="2147483647";

    int b[N],d[N],c[N*N];

    while(scanf("%s%s%s",a0,ch,e0)!=EOF)

    {

            first=second=mulresult=addresult=0;

            printf("%s %s %s/n",a0,ch,e0);

            for(i=0;i<strlen(a0);i++)

                if(a0[i]!='0')

                    break;

            for(j=0;i<=strlen(a0);i++,j++)

                    a[j]=a0[i];

             for(i=0;i<strlen(e0);i++)

                if(e0[i]!='0')

                    break;

            for(j=0;i<=strlen(e0);i++,j++)

                    e[j]=e0[i];

            if(strlen(a)<strlen(m)||(strlen(a)==strlen(m)

 

&&strcmp(a,m)<=0))

                first=0;

            else

                first=1;

            if(strlen(e)<strlen(m)||(strlen(e)==strlen(m)

 

&&strcmp(e,m)<=0))

                second=0;

            else

                second=1;

            GetDigits(b,a);

            GetDigits(d,e);

            if(ch[0]=='+')

            {

 

                for(i=0;i<N*N;i++)

                    c[i]=0;

                for(i=0;i<N;i++)

                    c[i]=b[i]+d[i];

                for(i=0;i<N+2;i++)

                    {

                        c[i+1]+=c[i]/10;

                        c[i]=c[i]%10;

                    }

                j=N*N-1;

                while(!c[j])j--;

                for(i=j,k=0;i>=0;i--,k++)

                   ss[k]=c[i]+48;

                   ss[k]='/0';

                if(strlen(ss)<strlen(m)||(strlen(ss)==strlen

 

(m)&&strcmp(ss,m)<=0))

                    addresult=0;

                else

                    addresult=1;

            }

            else

            {

 

                for(i=0;i<N*N;i++)

                    c[i]=0;

                for(i=0;i<N;i++)

                for(j=0;j<N;j++)

                  c[i+j]+=b[i] * d[j];

                for(i=0;i<N*2-1;i++)

                {

                    c[i+1]+=c[i]/10;

                    c[i]=c[i]%10;

                }

                while(!c[j])j--;

                for(i=j,k=0;i>=0;i--,k++)

                   ss[k]=c[i]+48;

                   ss[k]='/0';

                 if(strlen(ss)<strlen(m)||(strlen(ss)

 

==strlen(m)&&strcmp(ss,m)<=0))

                    mulresult=0;

                 else

                    mulresult=1;

            }

            if(first)

                printf("first number too big/n");

            if(second)

                 printf("second number too big/n");

            if(addresult||mulresult)

                 printf("result too big/n");

 

    }

    return 0;

}

 

748 - Exponentiation

本题不难但步骤较多

问题主要在对小数点的处理

和对0的处理

#include <stdio.h>

#include <string.h>

#define N 200

int i,j=0,t=0,b[N],c[N*2];

int GetDigits(int *a, char *ch)

{

   int i;

   int len=strlen(ch);

   for(i=0;i<N;i++)

       a[i]=0;

   for(i=0;i<len;i++)

   {

        a[len-i-1] =ch[i] - '0';

   }

   return a[N];

}

int multiply(int *a,int *b,int *c)

{

     int i,j;

     for(i=0;i<N*2;i++)

          c[i]=0;

     for(i=0;i<N;i++)

           for(j=0;j<N;j++)

                  c[i+j]+=a[i] * b[j];

     for(i=0;i<2*N-1;i++)

     {

           c[i+1]+=c[i]/10;

           c[i]=c[i]%10;

     }

     return c[N];

}

 

int main()

{

   // freopen("1.txt", "r", stdin);

    char s[N+1],ch[N];

    int m,point;

    int a[N];

   while( scanf("%s%d",s,&m)!=EOF)

    {

        //去掉后导0

        for(i=0;i<strlen(s);i++)

            if(s[i]=='.')

            break;

        for(j=strlen(s)-1;j>i;)

            if(s[j]=='0')

                j--;

            else break;

            s[j+1]='/0';

        if(m==1)

           { printf("%s/n",s);continue;}

        else

        {

           //计算小数点

        for(j=0,i=0;i<strlen(s);i++)

           if(s[i]!='.')

                ch[j++]=s[i];

            else

                point = strlen(s)-i-1;

            ch[j]='/0';

            point*=m;//小数位数

        b[N]=GetDigits(b,ch);

            i=N-1;

        c[N]=multiply(b,b,c);

        //大数乘幂

        for(i=0;i<N;i++)

            a[i] = b[i];

        for (j = 1; j < m; j++)

        {

            c[N*2]=multiply(a,b,c);

            for(i=0;i<N;i++)

               b[i]=c[i];

            if (j != m- 1)

             memset(c, '0', sizeof(c));

        }

        //忽略前导0

            j=N*2-1;

        while(c[j]==0)

                j--;

       // 插入小数点

    if((j+1)<point)

    {

        printf(".");

        while(point-1!=j)

        {

            printf("0");

            point--;

        }

        for(i=j;i>=0;i--)

        {

            printf("%d",c[i]);

        }

    }

    else

        for(i=j;i>=0;i--)

          {

            if(i==point-1)

                printf(".");

            printf("%d",c[i]);

            }

        printf("/n");

        }

 

    }

        return 0;

}

 

细胞自动复制机

读不懂题意

炒的代码

#include<stdio.h>

#include<string.h>

int main()

{

    int n,k;

    scanf("%d",&n);

    for (k=1;k<=n;k++)

    {

        int DNA[10];

        int i,j;

        for (i=0;i<=9;i++)

            scanf("%d",&DNA[i]);

        int now[50]={0},old[50];

        now[20]=1;

        for (i=1;i<=50;i++)

        {

            for (j=1;j<=40;j++)

            {

                if (now[j]==0) printf(" ");

                else if (now[j]==1) printf(".");

                else if (now[j]==2) printf("x");

                else printf("W");

            }

            printf("/n");

            memcpy(old,now,sizeof(old));

            for (j=1;j<=40;j++)

                now[j]=DNA[old[j-1]+old[j]+old[j+1]];

        }

        if (k!=n) printf("/n");

    }

    return 0;

}

 

694 The Collatz Sequence

类似3n+1

 

#include<stdio.h>

 

 int main()

{

 

    freopen("1.txt","r",stdin);

    long i,j,m;

    int count,num=1;

    while(scanf("%ld%ld",&i,&j)!=EOF)

    {

        m=i;

        count=1;

        if(i<0&&j<0)

            break;

        while(i!=1)

        {

 

            if(i%2==1)

    i=3*i+1;

 

            else

    i=i/2;

             if(i>j)

                break;

            count++;

 

        }

        printf("Case %d: A = %ld, limit = %ld, number of 

 

terms = %d/n",num++,m,j,count);

   }

return 0;

}

 

 

迷宫问题

学会了不加限制读一条输出一条

 

#include <stdio.h>

#include <string.h>

#include <ctype.h>

int main()

{

    char a[140];

    int i=0,j=0,m=0,k=0;

   while(gets(a))

   {

        m=strlen(a);

        for(i=0;i<m;i++)

            {

                if(a[i]=='!'||a[i]=='/n')

                    printf("/n");

                else{

                        if(isdigit(a[i]))

                            k+=a[i]-'0';

                        else{

                            for(j=0;j<k;j++)

                                if(a[i]=='b')

                                    printf(" ");

                                else

                                    printf("%c",a[i]);

                                    k=0;

                            }

                    }

 

            }

 

             printf("/n");

        }

    return 0;

}

 

 

表面问题

#include <stdio.h>

#include <string.h>

 

int main()

{

 

    int i,j,temp,total,m,num;

    int b[400];

    char a[400];

   while(scanf("%d",&m)!=EOF&&m!=0)

   {

        getchar();//用于吸收回车符

        for(i=1;i<=m;i++)

        {

            gets(a);

 

           num=0;

            for(j=0;j<strlen(a);j++)

                if(a[j]!='X')

                    num++;

            b[i]=num;

        }

 

         for(i=1;i<=m;i++)

            for(j=i+1;j<=m;j++)

                if(b[i]>b[j])

                {

                    temp=b[i];

                    b[i]=b[j];

                    b[j]=temp;

                }

        total=0;

        for(i=2;i<=m;i++)

           total+=b[i]-b[1];

        printf("%d/n",total);

    }

    return 0;

}

 

 

刽子手游戏

本题的关键是弄清题意

#include <stdio.h>

#include <string.h>

 

int main()

{

    unsigned int i,j,k;

    int n,wrong,right,place,lon;

    char a[100],b[100],c[100];

    while(scanf("%d",&n)!=EOF)

    {

//去除要猜单词中相同的元素以获得实际长度lon

        if(n==-1)break;

        scanf("%s%s",a,b);

 

        for(i=0;i<strlen(a);i++)

            for(j=i+1;j<strlen(a);j++)

                if(a[i]==a[j])

                    a[j]='0';

        lon=0;

        for(i=0;i<strlen(a);i++)

        if(a[i]!='0')

        lon++;

//按题意猜词

        wrong=0;right=0;k=strlen(b);

        for(i=0; i<k;i++)

        {

                place=0;

            for(j=0;j<strlen(a);j++)

            {

 

                if(b[i]==a[j])

                {

                    place=1;

                    a[j]='0';//如果猜中就把该词划掉

                }

            }

//统计正确错误的个数

            if(place==1)

                right++;

            if(place==0)

                wrong++;

            if(right==lon)

                {printf("Round %d/nYou win./n",n);break;}

            else if(wrong>=7)

                {printf("Round %d/nYou lose./n",n);break;}

 

        }

        if(wrong<7&&right<lon)

            printf("Round %d/nYou chickened out./n",n);

    }

    return 0;

}

 

 

旋转句

实质矩阵旋转

#include<stdio.h>

#include<string.h>

#define N 110

int main()

{

    int i=0,j,place,max;

    char a[N][N]={0};

     while(gets(a[i]))//这里关键

    {

 

        max=strlen(a[0]);

        if(strlen(a[i])>max)

            max=strlen(a[i]);

            i++;

    }

 

        place=i;//这里关键

    for(i=0;i<place;i++)

        for(j=0;j<max;j++)

                if(!a[i][j])

                a[i][j]=' ';//这里关键

    for(i=0;i<max;i++)

        {

            for(j=place-1;j>=0;j--)

               putchar(a[j][i]);

            printf("/n");

        }

   return 0;

    }

 

三角波

#include<stdio.h>

 

int main()

{

    int a,b,c,i,j,k1,k2;

   while(scanf("%d",&a)!=EOF)

   {

//printf("/n");原本想模仿输出结果弄的自己惨不忍睹wa了好

 

几次错在这

       for(i=0;i<a;i++)

       {

           scanf("%d%d",&b,&c);

           for(j=0;j<c;j++)

           {

               for(k1=1;k1<=b;k1++)

                    {

                        for(k2=1;k2<=k1;k2++)

                            printf("%d",k1);

                        printf("/n");

                    }

                for(k1=b-1;k1>=1;k1--)

                    {

                        for(k2=k1;k2>=1;k2--)

                            printf("%d",k1);

                        printf("/n");

                    }

                    if(i<a-1||j<c-1)//关键在这

                    printf("/n");

            }

 

        }

    }

    return 0;

}

 

N!怎样省时

#include <stdio.h>

#define UNIT 100000

#define LEN 10000

 

unsigned int num[LEN];

 

/* 计算 N!  */

void caculate(unsigned int *num, const int n)

{

int i, j, len, res;

 

num[0] = 1;

len = 1;

for (i = 1; i <= n; i++)

{

res = 0;

for (j = 0; j < len; j++)

{

num[j] = num[j] * i + res;

res = num[j] / UNIT;

num[j] %= UNIT;

}

 

if (res > 0)

{

num[len++] = res;

}

}

    printf("%d/n", len);

printf("%d", num[len-1]);

for (i = len - 2; i >= 0; i--)

{

        printf("%5.5u", num[i]);

}

putchar('/n');

}

 

int main()

{

int n;

 

while (scanf("%d", &n) != EOF)

{

caculate(num, n);

}

 

return 0;

}

 

高中物理

#include<stdio.h>

int main()

{

    int a,b;

    while(scanf("%d %d",&a,&b)!=EOF)

    {

        printf("%d/n",a*b*2);

        }

    return 0;

    }

小学幼儿园

494 - Kindergarten Counting Game

#include<stdio.h>

#include<string.h>

#include<ctype.h>

#define N 1000

int main()

{

    int i,word,count;

    char a[N];

    while(fgets(a,sizeof(a),stdin))

    {

 

        count =0;word=0;

        for(i=0;i<strlen(a);i++)

        {

 

            if(isalpha(a[i])&&!isalpha(a[i+1]))

                word=1;

            else

                word=0;

            count+=word;

        }

        printf("%d/n",count);

 

    }

return 0;

}

458 - The Decoder

解码器

#include<stdio.h>

#include<string.h>

#define N 100

int main()

{

    int i;

    char a[N],b[N];

    freopen("748.txt","r",stdin);

    while(scanf("%s",a)!=EOF)

    {

        for(i=0;i<strlen(a);i++)

        {

            b[i]=a[i]-7;

            }

            b[i]='/0';

            printf("%s/n",b);

        }

        return 0;

    }

10300 - Ecological Premium

生态奖金

#include<stdio.h>

int main()

{

int i,k,n,s,t,sum;

while(scanf("%d",&n)!=EOF)

{while(n--)

  {

    scanf("%d",&s);

       sum=0;

     while(s--)

       { scanf("%d %d %d",&k,&i,&t);

           sum+=k*t ;  

        }

      printf("%d/n",sum);

  }

}

return 0;

}

 

401 - Palindromes交了20多遍终于ACle

错误有一开始没判断大小

判断景象的算法不对

输出格式也不对 

#include<stdio.h>

#include<string.h>

#define MAXN 30

 char one[]="AEHIJLMOSTUVWXYZ12358";

 char two[]="A3HILJMO2TUVWXY51SEZ8";

int ism(char a,char b,int m,int i)

{

        int t;

for(t=0;t<strlen(one);t++)

{

if(a==one[t]&&b==two[t]||b==one[t]

 

&&a==two[t])

return 1;

}

return 0;

    }

int main()

{

 

int i,j,t,place,opsite;

unsigned int m=0;

char a[MAXN];

while(scanf("%s",a)!=EOF)

{ place=1;opsite=0;

m=strlen(a);

for(i=0;i<m-i;i++)

{

if(a[i]!=a[m-i-1])

{place=0;break;}

}

for(i=0;i<m;i++)

{opsite=ism(a[i],a[m-i-1],m,i);

if(!opsite)break;}

       if(place&&opsite)

       printf("%s -- is a mirrored palindrome./n/n", a);

       else if(place)

        printf("%s -- is a regular palindrome./n/n", a);

       else if(opsite)

         printf("%s -- is a mirrored string./n/n", a);

       else

         printf("%s -- is not a palindrome./n/n", a);

}

 

return 0;

}

10106 - Product

大数相乘

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define N 300

void GetDigits(int *a,char *s);

void multiply(int *a,int *b,int *c);

int main()

{

    char s1[N],s2[N];

    int i,j,a[N],b[N],c[N*2];

 while(scanf("%s/n%s",s1,s2)!=EOF)

 {if(strlen(s1)==1&&s1[0]=='0'||strlen(s2)==1&&s2[0]=='0')

 

{printf("0/n");continue;}

    else{GetDigits(a,s1);

    GetDigits(b,s2);

    multiply(a,b,c);

    j=N*2-1;

    while(c[j]==0)

        j--;

    for(i=j;i>=0;i--)

        printf("%d",c[i]);

        printf("/n");

        }

 }

 return 0;

}

void GetDigits(int *a, char *s)

{

   int i;

   char digit;

   int len=strlen(s);

   for(i=0;i<N;i++)

    *(a+i)=0;

   for(i=0;i<len;i++)

   {

        digit=*(s+i);

        *(a+len-1-i) = digit - '0';

   }

}

 

void multiply(int *a,int *b,int *c)

{

     int i,j;

     for(i=0;i<N*2;i++)

          *(c+i)=0;

 

     for(i=0;i<N;i++)

           for(j=0;j<N;j++)

                  *(c+i+j)+=*(a+i) * *(b+j);

     for(i=0;i<N*2-1;i++)

     {

           *(c+i+1)+=*(c+i)/10;

           *(c+i)=*(c+i)%10;

     }

}

//大数相除和取余

类似于乘法

 

#include<stdio.h>

#include<string.h>

#define maxn 1000

 

int a[maxn], c[maxn],i,j;

long long b;

long long yu;

char s1[maxn], op[3];

void  divandmod( int *a,char *s,char *op,long long b,int j)

    {

 

        for (i=1;i<=j;i++) a[i]=s1[j-i]-'0';

        //将字符串转化为数组

            memset(c,0,sizeof(c));

                yu=0;

            //初始化除数数组和余数为0

            for (i=j;i>=1;i--)

            {

                //数组反转

                yu=yu*10+a[i];

                c[i]=yu/b;

                yu=yu%b;

            }

 

            while (c[j]==0 && j>1) j--;

                //除去前导0

        if (op[0]=='/')

        {

            for (i=j;i>=1;i--) printf("%d",c[i]); //c中存的是

 

            printf("/n");

        }

        else

            printf("%lld/n",yu); //yu是余数

 

    }

int main()

{

    freopen("1.txt","r",stdin);

    while (scanf("%s%s%lld",s1,op,&b)!=EOF)

    {

        j=strlen(s1);

        divandmod( a,s1,op,b,j);

    }

    return 0;

}

 

424 - Integer Inquiry

#include<stdio.h>

#include<string.h>

#define N 100

void Addnum(int *a,int *b)

{

    int i;

    for(i=0;i<N;i++)

    *(b+i)+=*(a+i);

    for(i=0;i<N*100;i++)

    {

        *(b+i+1)+=*(b+i)/10;

        *(b+i)=*(b+i)%10;

        }

    }

void GetDigits(int *a, char *s)

{

   int i;

   char digit;

   int len=strlen(s);

   for(i=0;i<N;i++)

    *(a+i)=0;

   for(i=0;i<len;i++)

   {

        digit=*(s+i);

        *(a+len-1-i) = digit - '0';

   }

}

int main()

{   int i,j=N*100-1;

    char a[N];

    int c[N*100]={0},b[N]={0};

    while(1)

    {

        scanf("%s",a);

        if(strlen(a)==1&&a[0]=='0')

        {

            while(!c[j])j--;

            for(i=j;i>=0;i--)

            printf("%d",c[i]);

         printf("/n");break;}

       GetDigits(b,a);

       Addnum(b,c);

        }

        return 0;

    }

10878 - Decode the tape

#include<stdio.h>

int pingfang(int i)

{

    switch(i)

    {

        case 1:return 128;

        case 2:return 64;

        case 3:return 32;

        case 4:return 16;

        case 5:return 8;

        case 7:return 4;

        case 8:return 2;

        case 9:return 1;

        defult :return 0;

        }

    }

int main()

{

 int i,j,d,t=0;

char a[12];

while(gets(a)!=NULL)

  {

      d=0;

      if(a[0] != '|') continue;

      for(i=0;i<11;i++)

      {if(a[i]=='o')

       d+=pingfang(i);

      }

  putchar(d);

  }

return 0;

}

 

 

100 - The 3n + 1 problem

其实问题只有一个就是i和j的大小问题

我还想了longlong来解决多余!!!!

主要的输入的一句话

You can assume that no operation overflows a 32-bit integer.

哎还是理解能力差啊!!

************

#include<stdio.h>

 int max(int n)

{

    int count=0;

while(1)

{

count++;

if(n==1) break;

else if(n%2!=0)

{n=3*n+1;

}

    else

n=n/2;

}

return count;

}

int f(int i,int j)

{

    int temp,m,n;

   if(i>j){temp=i;i=j;j=temp;}

 m=max(i);

for(;i<=j;i++)

{

n=max(i);

if(n>m)

m=n;

}

return m;

}

 

 int main()

{

int  i,j,m,t,temp;

while(scanf("%d %d",&i,&j)!=EOF)

{  m=f(i,j);

printf("%d %d %d/n",i,j,m);

}

return 0;

}

********************

longlong函数

 

 

#include<stdio.h>

 int max(long long n)

{

    int count=0;

while(1)

{

count++;

if(n==1) break;

else if(n%2!=0)

{n=3*n+1;

}

    else

n=n/2;

}

return count;

}

int f(int i,int j)

{

    int temp,m,n;

   if(i>j){temp=i;i=j;j=temp;}

 m=max(i);

for(;i<=j;i++)

{

n=max(i);

if(n>m)

m=n;

}

return m;

}

 

 int main()

{

int  i,j,m,t,temp;

while(scanf("%d %d",&i,&j)!=EOF)

{  m=f(i,j);

printf("%d %d %d/n",i,j,m);

}

return 0;

}

**********************************

c++函数

 

 

#include<iostream>

using namespace std;

int t3n1(int n){

    int num=1;

    while(n!=1){

        if(n%2)

            n=3*n+1;

        else

            n=n/2;

        num++;

    }

    return num;

}

int work(int n,int m){

    int max=0,tmp;

    for(int i=n;i<=m;i++)

        if(max<(tmp=t3n1(i)))

            max=tmp;

 

    return max;

}

int main(){

    int n,m;

    while(cin>>n>>m){

        if(n>m){

            cout<<n<<' '<<m<<' '<<work(m,n)<<endl;

        }

        else

            cout<<n<<' '<<m<<' '<<work(n,m)<<endl;

    }

    return 0;

}

 

抱歉!评论已关闭.