团体程序设计天梯赛-练习集-L1区001——048C语言全解

  • Post author:
  • Post category:其他



题目链接:

https://www.patest.cn/contests/gplt

所有一区的题都是用c语言编写的,都通过了,有的可能设计的比较复杂。仅供参考,同时也感谢网上的一些大佬们提供的思路。如果有疑问,每题详解可以点击

http://www.cnblogs.com/czlm520/category/1148999.html

查看。那是我做每一题完后写的一些注意点和思路。



L1-001




Hello World


#include<stdio.h>
 int main()
 {
     printf("Hello World!\n");
     return 0;
}


L1-002




打印沙漏


#include<stdio.h>   
#include<math.h>    //无论是否剩余,都要输出剩余数。。。。。加判断输入是否满足要求???
int main()
{
  int N,n;
  char ch;
  scanf("%d %c",&N,&ch);
  n=sqrt((N+1)/2);
  for(int i=n;i>=-n;i--)
  {
    for(int j=1;j<=n-abs(i);j++)
      printf(" ");
    for(int j=1;j<=2*abs(i)-1;j++)
      printf("%c",ch);
    printf("\n");
    if(i==1)      //当i减到1时跳到-1
      i-=2;
  }
//  if(N-2*n*n+1 && N)   未剩余,仍要打印剩余数。
     printf("%d\n",N-2*n*n+1);
  return 0;
}

L1-003 个位数统计

#include<stdio.h>
#include<string.h>
int main()
{
    char ch[1000];
    int N[10]={0};
    scanf("%s",&ch);
    for(int i=0;i<strlen(ch);i++)
       N[ch[i]-48]++;
    for(int i=0;i<10;i++)
    {
        if(N[i])
          printf("%d:%d\n",i,N[i]);
    }
    return 0;
}

L1-004


计算摄氏温度

#include<stdio.h>
int main()
{
    int F;
    scanf("%d",&F);
    printf("Celsius = %d\n",5*(F-32)/9);
    return 0;
}

L1-005


考试座位号

#include<stdio.h>      
int main()
{
    int N,n;
    int cx[1000],sj[1000],ks[1000];
    char str[1000][14+1];
    scanf("%d",&N);
    for(int i=0;i<N;i++)
    {
        scanf("%s %d %d",&str[i],&sj[i],&ks[i]);
    } 
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&cx[i]);
    } 
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<N;j++)
        {
            if(cx[i]==sj[j])
               printf("%s %d\n",str[j],ks[j]);
        }
    }
    return 0;
}

L1-006. 连续因子

#include<stdio.h>
#include<math.h> 
int main()
{
    int n,i;
    scanf("%d",&n);
    int max_length,max_start;
    max_length=0,max_start=0;
    for(i=2;i<=sqrt(n)+1;i++)
    {
        if(n%i==0)     //找到第一个被能被整除的数
        {
            int j,nn,start,length;
            nn=n;
            start=i;
            j=i;
            length=0;
            while(nn%j==0)
            {
                nn/=j;           //新的被除数 
                j++;             //新的除数 
                length++;         //长度加一 
            }
            if(length>max_length)   //找到更长的连续因子
            {
                max_length=length;
                max_start=start;
            } 
        } 
    }
    if(max_length==0)    //素数;
    {
        max_start=n;
        max_length=1;
    } 
    printf("%d\n",max_length);
    printf("%d",max_start);
    for(i=max_start+1;i<max_start+max_length;i++)
        printf("*%d",i);
    printf("\n");
    return 0;
 }

L1-007. 念数字

#include<stdio.h>
#include<string.h>
int main()
{
    char num[100];
    int i;
    scanf("%s",&num);
    if(num[0]=='-')
       printf("fu "),i=1;
    else
       i=0;
    for(i;i<strlen(num);i++)
    {
        switch(num[i]-48)
        {
            case 0:printf("ling");break;
            case 1:printf("yi");break;
            case 2:printf("er");break;
            case 3:printf("san");break;
            case 4:printf("si");break;
            case 5:printf("wu");break;
            case 6:printf("liu");break;
            case 7:printf("qi");break;
            case 8:printf("ba");break;
            case 9:printf("jiu");break;
            default:break;
        }
        if(i<strlen(num)-1) printf(" ");
    }
    return 0;
}

L1-008. 求整数段和

#include<stdio.h>
int main()
{
    int A,B,Sum=0;
    scanf("%d %d",&A,&B);
    for(int i=1;i<=B-A+1;i++) 
    {
        Sum+=i+A-1;
        printf("%5d",i+A-1);
        if(!(i%5)) printf("\n");
    }
    if(((B-A+1)%5)) printf("\n"); //数未排满, 转行 
    printf("Sum = %d",Sum);
    return 0;
}

L1-009. N个数求和

#include<stdio.h>
#include<math.h>
struct fengshu{
    long long fz;
    long long fm;
}; 
struct fengshu sum(struct fengshu fs[],int n)
{
    struct fengshu sum;
    sum.fz=0,sum.fm=1;
    for(int i=0;i<n;i++)
    {
        sum.fz=sum.fz*fs[i].fm +sum.fm*fs[i].fz;
        sum.fm=sum.fm*fs[i].fm;
    }
    return sum;
}
long long gy(long long a,long long b)        //求最大公约数的递归函数 
{
    return b == 0 ? a : ( gy(b, a%b) );     
}
int main()
{
    int N;
    struct fengshu fs[100];
    scanf("%d",&N);
    for(int i=0;i<N;i++)
        scanf("%lld/%lld",&fs[i].fz,&fs[i].fm);  //  a/b格式化输入 
    struct fengshu s;
    s=sum(fs,N);
    long long g=gy(s.fm,s.fz);
    s.fm/=g,s.fz/=g;
    if(s.fz==0) printf("%lld",0);
    else if(abs(s.fz)<s.fm) printf("%lld/%lld\n",s.fz,s.fm);
    else if(abs(s.fz)>s.fm) printf("%lld %lld/%lld\n",s.fz/s.fm,s.fz%s.fm,s.fm);
    return 0;
}

L1-010. 比较大小

#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    a>b?a>c?b>c?printf("%d->%d->%d",c,b,a):printf("%d->%d->%d",b,c,a):printf("%d->%d->%d",b,a,c):b>c?c>a?printf("%d->%d->%d",a,c,b):printf("%d->%d->%d",c,a,b):printf("%d->%d->%d",a,b,c);
    return 0;
}

L1-011. A-B

#include<stdio.h>
#include<string.h>
int main()
{
    char strA[105],strB[105];
    gets(strA);
    gets(strB);
    for(int i=0;i<strlen(strB);i++)
    {
        for(int j=0;j<strlen(strA);j++)
         {
             if(strA[j]==strB[i]) 
             {
                 int k;
                 for(k=j;k<strlen(strA);k++) strA[k]=strA[k+1];
                 strA[k]='\0';
             }
         }
    }
    printf("%s\n",strA);
    return 0;
}

L1-012. 计算指数

#include<stdio.h>
int main()
{
    int n,s=1;
    scanf("%d",&n);
    if(n>0 && n<=10)
    for(int i=0;i<n;i++) s*=2;
    printf("2^%d = %d\n",n,s);
    return 0;
}

L1-013. 计算阶乘和

#include<stdio.h>      //段错误??????????? 
int js(int n)
{
    if(n==1||n==0) return 1;
    else return n*js(n-1);
}
int main()
{
    int n,s=0;
    scanf("%d",&n);   //忘记加&O.O 
    for(int i=1;i<=n;i++)s+=js(i);
    printf("%d",s);
    return 0;
}

L1-014. 简单题

#include<stdio.h>
int main()
{
    printf("This is a simple problem.");
    return 0;
}

L1-015. 跟奥巴马一起画方块

#include<stdio.h>
int main()
{
    int N,n;
    char C;
    scanf("%d %c",&N,&C);
    if(N>=3 && N<=21)
    {
        if(N%2==0) n=N/2;   //四舍五入 
        else n=N/2+1;
        for(int j=0;j<n;j++)  //行 
        {
        for(int i=0;i<N;i++) printf("%c",C);  //列 
        printf("\n");
        }  
    }  
    return 0;
 }

L1-016. 查验身份证

#include<stdio.h>
int main()
{
    int N;
    char id[100][20];
    scanf("%d",&N);
    int i;
    for(i=0;i<N;i++)scanf("%s",id[i]);
    int er;
    er=0;
    for(i=0;i<N;i++)
    {
        int sum,j;
        sum=0;
        for(j=0;j<17;j++)
        {
            if(id[i][j]<48||id[i][j]>57)
            {
                er++;
                printf("%s\n",id[i]);
                goto next;
            }
        }
        sum=(id[i][0]-48)*7+(id[i][1]-48)*9+(id[i][2]-48)*10+(id[i][3]-48)*5+(id[i][4]-48)*8+(id[i][5]-48)*4+(id[i][6]-48)*2+(id[i][7]-48)*1+(id[i][8]-48)*6+(id[i][9]-48)*3+(id[i][10]-48)*7+(id[i][11]-48)*9+(id[i][12]-48)*10+(id[i][13]-48)*5+(id[i][14]-48)*8+(id[i][15]-48)*4+(id[i][16]-48)*2;
        //sum=sum/100;
        switch((sum%11))
        {
            case 0:
                if(id[i][17]!='1')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 1:
                if(id[i][17]!='0')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 2:
                if(id[i][17]!='X')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 3:
                if(id[i][17]!='9')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 4:
                if(id[i][17]!='8')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 5:
                if(id[i][17]!='7')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 6:
                if(id[i][17]!='6')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 7:
                if(id[i][17]!='5')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 8:
                if(id[i][17]!='4')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 9:
                if(id[i][17]!='3')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
            case 10:
                if(id[i][17]!='2')
                {
                    printf("%s\n",id[i]);
                    er++;
                }
                break;
        }
        next:;
    }
    if(er==0)printf("All passed\n");
    return 0;
}

L1-017. 到底有多二

#include<stdio.h>
int main()
{
    char str[51];
    int i,num,n;
    num=0,i=0;
    while(1)
    {
        scanf("%c",&str[i]);
        if(str[i]=='\n')break;
        if(str[i]=='2')num++;
        i++;
    }
    n=i;                   
    float er;
    if(str[0]=='-')n--,er=1.5;             
    else er=1;
    er*=(float)num/n;
    if((str[i-1]-48)%2==0)er=2*er;
    printf("%.2f%%\n",er*100);
    return 0;
 }

L1-018. 大笨钟

#include<stdio.h>
int main()
{
    char h1,h2,m1,m2;
    scanf("%c%c:%c%c",&h1,&h2,&m1,&m2);
    if(h1=='0'||h1=='1'&&h2=='1'||h1=='1'&&h2=='2'&&m1=='0'&&m2=='0')
        printf("Only %c%c:%c%c.  Too early to Dang.",h1,h2,m1,m2);
    else 
    {
        int i,n;
        n=(h1-48)*10+h2-48;
        for(i=0;i<n-12;i++)
            printf("Dang");
        if(m1=='0'&&m2=='0')
            printf("\n");
        else 
            printf("Dang\n");
    }
    return 0;
 }

L1-019. 谁先倒

#include<stdio.h>
int main(){
    int a,b,n,i,j;
    scanf("%d %d",&a,&b);  //二人酒量
    scanf("%d",&n);
    i=0,j=0;
    while(i<=a&&j<=b)
    {
        int a1,a2,b1,b2,h;
        scanf("%d %d %d %d",&a1,&a2,&b1,&b2);
        h=a1+b1;
        if(a2==h){
            if(b2!=h)i++;
        }
        else{
            if(b2==h)j++;
        }
    }
    if(i>a){
        printf("A\n");
        printf("%d\n",j);
    }
    else
    {
        printf("B\n");
        printf("%d\n",i);
    }
    return 0;
}

L1-020. 帅到没朋友

#include<stdio.h>  
int main()  
{  
    int id[100000];  
    int n;  
    scanf("%d",&n);  
    int j;  
    while(n)  
    {  
        int nn,a;  
        scanf("%d",&nn);  
        if(nn==1)  
        {  
            scanf("%d",&a);  
            goto next;  
        }  
        else  
        {  
            for(j=0;j<nn;j++)  
            {  
                scanf("%d",&a);  
                id[a]++;  
            }  
        }  
        next:n--;  
    }  
    int nnn,out[100000],i;  
    i=0;  
    scanf("%d",&nnn);  
    for(j=0;j<nnn;j++)  
    {  
        int b;  
        scanf("%d",&b);  
        if(id[b]==0)  
        {  
            out[i]=b;  
            i++;  
            id[b]=1;  
        }  
    }  
    if(i==0)printf("No one is handsome\n");  
    else{  
        for(j=0;j<i;j++)  
        {  
            printf("%05d",out[j]);  
            if(j<i-1)printf(" ");  
        }  
        printf("\n");  
    }  
    return 0;  
 }   

L1-021. 重要的话说三遍

#include<stdio.h>
int main(){
    for(int i=0;i<3;i++)
        printf("I'm gonna WIN!\n");
    return 0;
}

L1-022. 奇偶分家

#include<stdio.h>
int main(){
    int N,js,ou;
    scanf("%d",&N);
    js=0,ou=0;
    while(N){
        int a;
        scanf("%d",&a);
        if(a%2)js++;
        else ou++;
        N--;
    }
    printf("%d %d\n",js,ou);
    return 0;
}

L1-023. 输出GPLT

#include<stdio.h>
#include<string.h>
int main(){
    char str[10000];
    scanf("%s",str);
    int i,n,ng,np,nl,nt;
    n=strlen(str);
    ng=0,np=0,nl=0,nt=0;
    for(i=0;i<n;i++)
    {
        switch(str[i]){
            case 'g':
            case 'G':
                ng++;
                break;
            case 'p':
            case 'P':
                np++;
                break;
            case 'l':
            case 'L':
                nl++;
                break;
            case 't':
            case 'T':
                nt++;
                break;    
        }
    }
    while(ng||np||nl||nt)
    {
        if(ng){
            printf("G");
            ng--;
        }
        if(np){
            printf("P");
            np--;
        }
        if(nl){
            printf("L");
            nl--;
        }
        if(nt){
            printf("T");
            nt--;
        }
    }
    printf("\n");
    return 0;
}

L1-024. 后天

#include<stdio.h>
int main(){
    int d;
    scanf("%d",&d);
    if(d<=5)printf("%d\n",(d+2));
        else printf("%d\n",(d+2)%7);
    return 0;
}

L1-025. 正整数A+B

#include<stdio.h>
#include<string.h>
int main(){
    char str[10000];
    gets(str);
    int i,j,A,B;
    i=0,A=0;
    while(str[i]!=' '){
        if(str[i]>47&&str[i]<58)  //数字 
             A++;
        else A=0;
        i++;
    }
    if(A<i||A==0&&i==0)A=0;
    else if(str[0]=='0')A=0;
    else{
        A=0;
        for(j=0;j<i;j++)A=A*10+str[j]-48;
    }
    if(A>1000)A=0;
    B=0;
    for(j=i+1;j<strlen(str);j++){
        if(str[j]<48||str[j]>57){
            B=0;
            break;
        }
        else B=B*10+str[j]-48;
    }
    if(str[i+1]=='0')B=0;
    if(B>1000)B=0;
    if(A==0)printf("?");
    else printf("%d",A);
    printf(" + ");
    if(B==0)printf("?");
    else printf("%d",B);
    printf(" = ");
    if(A&&B)printf("%d\n",A+B);
    else printf("?\n");
    return 0;
}

L1-026. I Love GPLT

#include<stdio.h>
int main(){
    char str[]={"I Love GPLT"};
    int i;
    i=0;
    while(str[i]!='\0')
    {
        printf("%c\n",str[i]);
        i++;
    }
    return 0;
}

L1-027. 出租

#include<stdio.h>
int main(){
    char str[12];
    int i,j,arr[10]={0},index[12],num;
    scanf("%s",&str);
    for(i=0;i<11;i++)arr[str[i]-48]++;
    printf("int[] arr = new int[]{");
    num=0;
    int zf[10];
    for(i=9;i>=0;i--)
        if(arr[i])zf[num]=i,num++;
    for(i=0;i<num;i++){
       printf("%d",zf[i]);
       if(i<num-1)printf(",");
    }
    printf("};\n");
    printf("int[] index = new int[]{");
    for(i=0;i<11;i++){
        for(j=0;j<num;j++){
            if((str[i]-48)==zf[j]){
                printf("%d",j);
                break;
            }
        }
        if(i<10)printf(",");
    }
    printf("};\n");
    return 0;
}

L1-028. 判断素数

#include<stdio.h>
#include<math.h>
int main(){
    int n,i,j,num[10];
    scanf("%d",&n);
    for(i=0;i<n;i++)scanf("%d",&num[i]);
    for(i=0;i<n;i++){
        if(num[i]==1)printf("No\n");          //1不是素数 
        else{
        for(j=2;j<=sqrt(num[i]);j++){
            if(num[i]%j==0){
                printf("No\n");
                goto next;
                //break;                           //用break;会出错????????????? 
            }
        }
        printf("Yes\n");
        next:;
        }
    }
    return 0;
}

L1-029. 是不是太胖了

#include<stdio.h>
int main(){
    int h;
    scanf("%d",&h);
    printf("%.1f\n",(h-100)*0.9*2);
    return 0;
}

L1-030. 一帮一

#include<stdio.h>
int main()
{
    struct student{
        int ge;
        char na[10];
    };
    struct student st[50];
    int n,i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)scanf("%d %s",&st[i].ge,st[i].na);
    for(i=0;i<n/2;i++)
    {
        for(j=n-1;j>i;j--){
            if(st[i].ge!=st[j].ge&&st[j].ge!=2){
                printf("%s %s\n",st[i].na,st[j].na);
                st[j].ge=2;
                goto next;
            }
        }
        next:;
    }
    return 0;
}

L1-031. 到底是不是太胖了

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i,h[21][2];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d %d",&h[i][0],&h[i][1]);
    }
//    for(i=0;i<n;i++){
//        printf("%d %d",h[i][0],h[i][1]);
//    }
    for(i=0;i<n;i++)
    {
        double a,c;
        a=(h[i][0]-100)*0.9;
        c=a-(double)h[i][1]/2.0;
        if(fabs(c)<a*0.1){
        printf("You are wan mei!\n");}
        else if(a<(double)h[i][1]/2.0){
        printf("You are tai pang le!\n");}
        else{
        printf("You are tai shou le!\n");}
    }
    return 0;
}

L1-032. Left-pad

#include<stdio.h>
 #include<string.h>
 int main()
 {
     int n,i;
     char c,str[1000000],sout[1000000];
     scanf("%d %c",&n,&c);
     getchar();
     gets(str);
     if(strlen(str)>n)        //字符串长度大于n
    {
        for(i=0;i<n;i++)sout[i]=str[strlen(str)-n+i];
    }
    else
    {
        for(i=0;i<n-strlen(str);i++)sout[i]=c;
        strcat(sout,str);
    } 
    puts(sout);
    return 0;
 }

L1-033. 出生年

#include<stdio.h>
#include<math.h>
int judge(int a)          //判断年份中不同数的个数 
{
    int i,j,n,num[4];
    n=4;
    for(i=0;i<4;i++){
        if(a/pow(10,4-i-1)){
            num[i]=a/pow(10,4-i-1);
            a=a%(int)pow(10,4-i-1);
        }    
        else num[i]=0;
    }
    for(i=0;i<4;i++){
       for(j=i+1;j<4;j++){
           if(num[i]==num[j]){
               n--;
           }
       }
   }
    switch(n){
        case -2:return 1;
        case 1:return 2;
        case 2:return 2;
        case 3:return 3;
        case 4:return 4;
    }
}
int main(){
    int nn,y;
    scanf("%d %d",&y,&nn);
    int old;
    old=0;
    while(judge(y)!=nn)
    {
        old++;
        y++;
    }
    printf("%d %04d\n",old,y);
    return 0;
}

L1-034. 点赞

#include<stdio.h>
int main(){
    int N,i,bel[1000]={0};
    scanf("%d",&N);
    for(i=0;i<N;i++){
        int a,j,b;
        scanf("%d",&a);
        for(j=0;j<a;j++)
        {
            scanf("%d",&b);
            bel[b-1]++;
        }
    }
    int max,be;
    max=1;
    for(i=0;i<1000;i++)
    {
        if(max<=bel[i])
        {
            max=bel[i];
            be=i+1;
        }
    }
    printf("%d %d\n",be,max);
    return 0;
}

L1-035. 情人节

#include<stdio.h>
int main(){
    char str[10000][11];
    int i,num;
    i=0;
    while(1){
        scanf("%s",str[i]);
        if(str[i][0]=='.')break;
        i++;
    }
    num=i;
    if(num<2)printf("Momo... No one is for you ...");
    else if(num<14)printf("%s is the only one for you...",str[1]);
    else printf("%s and %s are inviting you to dinner...",str[1],str[13]);
    return 0;
}

L1-036. A乘以B

#include<stdio.h>
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d\n",a*b);
    return 0;
}

L1-037. A除以B

#include<stdio.h>
int main()
{
    int fz,fm;
    scanf("%d %d",&fz,&fm);
    if(fm<0)printf("%d/(%d)=%.2f\n",fz,fm,(float)fz/fm);
    else if(fm==0)printf("%d/%d=Error\n",fz,fm);
    else printf("%d/%d=%.2f",fz,fm,(float)fz/fm);
    return 0;
}

L1-038. 新世界

#include<stdio.h>
int main()
{
    printf("Hello World\n");
    printf("Hello New World\n");
    return 0;
}

L1-039. 古风排版

#include<stdio.h>
 int main()
 {
    int n,i,j,len;
    char str[2000];
    scanf("%d",&n);
    getchar();
    i=0;
    while(1)
    {
        scanf("%c",&str[i]);
        if(str[i]=='\n')break;
        i++;
    }
    len=i;      //长度
    if(len%n)    //有余数 
    {
        for(i;i<(len/n+1)*n;i++)
            str[i]=' ';
        len=len/n;
    }
    else len=len/n-1;
    for(i=0;i<n;i++)
    {
        for(j=len;j>=0;j--)
            printf("%c",str[j*n+i]);
        printf("\n");
    } 
    return 0;
 }

L1-040. 最佳情侣身高差

#include<stdio.h>
int main()
{
    double f[10];
    char c[10];
    int n,i;
    scanf("%d",&n);
    getchar();
    for(i=0;i<n;i++)
    {
        c[i]=getchar();
        scanf("%lf",&f[i]);
        getchar();
    }
    for(i=0;i<n;i++)
    {
        if(c[i]=='M')printf("%.2lf\n",f[i]/1.09);
        else printf("%.2lf\n",f[i]*1.09);
    }
    return 0;
}

L1-041. 寻找250

#include<stdio.h>
int main()
{
    int a,i;
    i=0;
    while(1)
    {
        scanf("%d",&a);
        if(a==250)break;
        i++;
    }
    printf("%d\n",i+1);
    return 0;
}

L1-042. 日期格式化

#include<stdio.h>
int main()
{
    int y,m,d;
    scanf("%d-%d-%d",&m,&d,&y);
    printf("%d-%02d-%02d\n",y,m,d);
    return 0;
}

L1-043. 阅览室

#include<stdio.h>
int main()
{
    struct day{
        int num;
        int time;
    };
    struct day dy[10];
    int N;
    scanf("%d",&N);
    int d;
    for(d=0;d<N;d++)    //N天 
    {
        struct book{
            int id;
            int tj;
            int th;
        };
        struct book bk[1000];
        dy[d].num=0,dy[d].time=0;     //借阅次数0,阅读时间0 
        int i;
        i=0;      //每天借阅的xin书次数 
        while(1)                    //一天 
        {
            char ch;
            int a,t1,t2;
            scanf("%d %c %d:%d",&a,&ch,&t1,&t2);   //输入格式???????????、 
            if(a==0)goto nextday;      //输入0直接进入下一天 
            else
            {
                if(ch=='S')    //借
                {
                    int j;
                    j=0; 
                    for(j=0;j<i;j++)          //此书是否已经借出过 
                    {
                        if(bk[j].id==a)   //借出过 且未记录到还 
                        {
                            bk[j].tj=t1*60+t2;   //重新存借阅时间 
                        //    bk[j].th=-1;          //还时间为-1  
                            goto nextstep; 
                        } 
                    }
                    if(j==i)           //未借阅过 
                    {
                        bk[i].id=a;    //存数号 
                        bk[i].tj=t1*60+t2;   //存借阅时间 
                        i++;        //未借过 
                    }
                }//借 
                else          //还
                {
                    int j;                   
                    for(j=0;j<i;j++)       //查找是否借阅 
                    {
                        if(bk[j].id==a)    //是借阅的书 
                        {
                            bk[j].th=t1*60+t2;    //存还书时间。 
                            dy[d].time+=bk[j].th-bk[j].tj;   //将阅读时间加到一天的阅读时间中 
                            dy[d].num++;                  //借阅还书次数加一 
                            bk[j].id=-1;            //清处借书 
                            goto nextstep;
                        } 
                    }
                }//借书还书还书 
                nextstep:;
            }//一天的操作 
        }//一天是否结束     
        nextday:;
    }
    for(d=0;d<N;d++)
    {
        if(dy[d].num==0)printf("0 0\n");
        else printf("%d %.0f\n",dy[d].num,(float)dy[d].time/dy[d].num);
    }
    return 0;
}

L1-044. 稳赢

#include<stdio.h>
#include<string.h>
int main()
{
    int k,i,n;
    char str[10000][10];
    scanf("%d",&k);
    i=0;
//    getchar();
    while(1)
    {
        scanf("%s",str[i]);
        if(strcmp(str[i],"End")==0)break;
        i++;
    }
    n=i;
//    for(i=0;i<n;i++)
//    {
//        printf("%s\n",str[i]);
//    }
    for(i=0;i<n;i++)
    {
        
        if((i+1)%(k+1))
        {
            if(strcmp("ChuiZi",str[i])==0)
            {
                printf("Bu\n");
             } 
             else if(strcmp("JianDao",str[i])==0)
            {
                printf("ChuiZi\n");
            }
            else
            {
                printf("JianDao\n");
            }
        }
        else
        {
            printf("%s\n",str[i]);
        }
    }
    return 0;
}

L1-045. 宇宙无敌大招呼

#include<stdio.h>
int main()
{
    char str[8];
    scanf("%s",str);
    printf("Hello %s\n",str);
    return 0;
}

L1-046. 整除光棍

#include<stdio.h>
#include<math.h>
int main()
{
    int N;
    scanf("%d",&N);
    int i,x,n;
    i=1,n=N,x=1;;
    while(n/10)
    {
        n/=10;
        x+=pow(10,i);
        i++;
    }
    if(N==x)
    {
        printf("1 %d\n",i);
        return 0;
    }
    x+=pow(10,i);   //比N多一位的光棍数 
    while(x%N)
    {
        printf("%d",x/N);
        x=(x%N)*10+1;
        i++;
    } 
    printf("%d %d\n",x/N,i+1);
    return 0;
}

L1-047. 装睡

#include<stdio.h>
int main()
{
    struct people{
        char name[4];
        int fx;
        int mb;
    };
    struct people peo[100];
    int N,i;
    scanf("%d",&N);
    for(i=0;i<N;i++)scanf("%s %d %d",peo[i].name,&peo[i].fx,&peo[i].mb);
    for(i=0;i<N;i++)
    {
        if((peo[i].fx<15||peo[i].fx>20)||(peo[i].mb<50||peo[i].mb>70))
            printf("%s\n",peo[i].name);
    }
    return 0;
}

L1-048. 矩阵A乘以B

#include<stdio.h>
int main()
{
    int a1,b1,i,j;
    int jz1[1000][1000],jz2[1000][1000];
    scanf("%d %d",&a1,&b1);   //读入行与列 
    for(i=0;i<a1;i++)
        for(j=0;j<b1;j++)
            scanf("%d",&jz1[i][j]);
    int a2,b2;
    scanf("%d %d",&a2,&b2);
    if(b1!=a2)
    {
        printf("Error: %d != %d\n",b1,a2);
        return 0;
    }
    printf("%d %d\n",a1,b2);
    for(i=0;i<a2;i++)
        for(j=0;j<b2;j++)
            scanf("%d",&jz2[i][j]);
    for(i=0;i<a1;i++)
    {
        for(j=0;j<b2;j++)
        {
            int m,jz;
            jz=0;
            for(m=0;m<b1;m++)
                jz+=jz1[i][m]*jz2[m][j];
            printf("%d",jz);
            if(j<b2-1)printf(" ");
        }
        printf("\n");
    }
    return 0;
 }

总结

这48道题,都是用的以前学的c语言基础,根本没有用到,数据结构,很多题目的情况考虑的都不大全,所以很少一次性通过。总的来说,还是比较简单的,做了这些才发现细心很重要,情况要考虑完,C语言编程能力感觉并没有提升多少,所以决定先去学一遍数据结构,再来做新的题目。



版权声明:本文为lianwaiyuwusheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。