东华大学计算机软件工程复试 基础练习

do{scanf("%d",&a[index++]);printf("%d
",a[index-1]);}while((ch=getchar())!='
'&&ch!=EOF);//每行不确定有几个输入时

1、球的体积

#include <stdio.h>
int main()
{
    double PI=3.1415927,r;
    while(scanf("%lf", &r) != EOF)
    {
        double result=(double)4/(double)3*PI*r*r*r;
        printf("%.3f
",result);
    }
    return 0;
}

2、两点间的距离

#include <stdio.h>
#include <math.h>
int main()
{
    double x1,y1,x2,y2;
    while(scanf("%lf%lf%lf%lf", &x1,&y1,&x2,&y2) != EOF)
    {
        double result= sqrt(pow(x1-x2,2)+pow(y1-y2,2));
        printf("%.2f",result);
    }
    return 0;
}

3、大小写转换

#include <stdio.h>
int main()
{
    char ch;
    scanf("%c",&ch);
    printf("%c
",ch+32);
    return 0;
}

4、温度转换

#include <stdio.h>
int main()
{
    double c,result;
    while(scanf("%lf",&c)!=EOF)
    {
        result=(double)9/(double)5*c+(double)32;
        printf("%.2f",result);
        printf("0000
");
    }
    return 0;
}

5、判断奇偶

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        printf("%d ",n);
        if(n%2==0)
            printf("is even
");
        else
            printf("is odd
");
    }
    return 0;
}

6、逆序输出1到4位的正整数

#include <stdio.h>
int main()
{
    int n,temp;
    while(~scanf("%d",&n))
    {
        if(n<=0||n/10000>=1)printf("error!
");
        else
        {
            while(n)
            {
                temp=n%10;
                printf("%d",temp);
                n=n/10;
            }
            printf("
");
        }
    }
    return 0;
}

7、简单加减乘除

#include <stdio.h>
int main()
{
    double a,b;
    int action;
    while(~scanf("%lf%lf%d",&a,&b,&action))
    {
        switch(action)
        {
            case 1:printf("%.2f
",a+b);break;
            case 2:printf("%.2f
",a-b);break;
            case 3:printf("%.2f
",a*b);break;
            case 4:if(b!=0)printf("%.2f
",a/b);else printf("error!
");break;
        }
    }
    return 0;
}

8、字母的前驱或后继

#include <stdio.h>
int main()
{
    char ch;
    scanf("%c",&ch);
    if(ch>='a'&&ch<='a'+12)
        printf("%c
",ch+1);
    else printf("%c
",ch-1);
    return 0;
}

9、门票价格计算

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        if(n<0||n>1000)printf("error!
");
        else
        {
            if(n>120) printf("%.2f
",n*5*0.7);
            else if(n>80)printf("%.2f
",n*5*0.8);
            else if(n>40) printf("%.2f
",n*5*0.85);
            else if(n>20) printf("%.2f
",n*5*0.9);
            else printf("%.2f
",(float)n*(float)5);
        }
    }
    return 0;
}

10、星期几问题

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        switch(n)
        {
        case 0:printf("Sunday
");break;
        case 1:printf("Monday
");break;
        case 2:printf("Tuesday
");break;
        case 3:printf("Wednesday
");break;
        case 4:printf("Thursday
");break;
        case 5:printf("Friday
");break;
        case 6:printf("Saturday
");break;
        }
    }
    return 0;
}

11、时间相加

#include <stdio.h>
int main()
{
    int a1,a2,a3,b1,b2,b3;
    while(~scanf("%d%d%d%d%d%d",&a1,&a2,&a3,&b1,&b2,&b3))
    {
        int sf=0,mf=0;
        a3+=b3;
        if(a3>=60){a3-=60;sf=1;}
        a2=a2+b2+sf;
        if(a2>=60){a2-=60;mf=1;}
        a1=a1+b1+mf;
        printf("%d %d %d
",a1,a2,a3);
    }
    return 0;
}

12、成绩转换

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        if(n<0||n>100)printf("Score is error!
");
        else
        {
            if(n>=90)printf("A
");
            else if(n>=80)printf("B
");
            else if(n>=70)printf("C
");
            else if(n>=60)printf("D
");
            else printf("E
");
        }
    }
    return 0;
}

13、A+B

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int a,b;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&a,&b);
            printf("%d
",a+b);
        }
    }
    return 0;
}

14、字母的前序或后继

#include <stdio.h>
int main()
{
    char ch;
    while(~scanf("%c",&ch))
    {
        if(!(ch>='a'&&ch<='z'))continue;
        if(ch>='a'&&ch<='a'+12)
        printf("%c
",ch+1);
        else printf("%c
",ch-1);
    }
    return 0;
}

15、幼儿园分班问题

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        if(n<2||n>6)printf("No.
");
        else if(n>=5) printf("Three.
");
        else if(n>=4) printf("Two.
");
        else printf("One.
");
    }
    return 0;
}

16、门票价格计算(同9)

17、折纸问题

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        n*=100;
        int i=1,count=0;
        while(i<=n)
        {
            i*=2;
            count++;
        }
        printf("%d
",count);
    }
    return 0;
}

18、数字之和

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int sum=0;
        while(n)
        {
            sum+=n%10;
            n/=10;
        }
        printf("%d
",sum);
    }
    return 0;
}

19、约数之和

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

20、求最高 最低平均分

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int min=100,max=0,sum=0;
        int num;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&num);
            min=min>num?num:min;
            max=max>num?max:num;
            sum+=num;
        }
        printf("%d %d %d
",max,min,sum/n);
    }
    return 0;
}

21、计算e

#include <stdio.h>
__int64 fun(__int64 i)
{
    if(i==1)return (__int64)1;
    else return (__int64)i*fun(i-1);
}
int main()
{
    double th;
    while(~scanf("%lf",&th))
    {
        if(th>1)
        {
            printf("0.000000 0
");
            continue;
        }
        double result=1,cur=1;
        int count=1;
        while(cur>=th)
        {
            result+=cur;
            count++;
            cur=1.0/fun(count);
        }
        printf("%.6f %d
",result,count);
    }
    return 0;

22、工业产值翻倍

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        double cur=100;
        int count=0;
        while(cur<200)
        {
            cur+=cur*n/(double)100;
            count++;
        }
        printf("%d
",count);
    }
    return 0;
}

23 、SUM

#include <stdio.h>
int main()
{
    int n,num,sum,val;
    while(~scanf("%d",&n))
    {
        while(n--)
        {
            scanf("%d",&num);
            sum=0;
            for(int i=0;i<num;i++)
            {
                scanf("%d",&val);
                sum+=val;
            }
            printf("%d
",sum);
        }
    }
    return 0;
}

24、求素数

#include <stdio.h>
#include <math.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int num,flag;
        while(n--)
        {
            scanf("%d",&num);
            flag=0;
            for(int i=2;i<sqrt(num);i++)
            {
                if(num%i==0){flag=1;break;}
            }
            if(flag) printf("no
");
            else printf("yes
");
        }
    }
    return 0;
}

25、求最大公约数

#include <stdio.h>
int main()
{
    //辗转相除可求最小公倍数
    //ab的最小公倍数为min 
    //最大公约数为max
    //a*b=min*max
    int n;
    while(~scanf("%d",&n))
    {
        int a,b,min,max,sum,temp;
        while(n--)
        {
            scanf("%d%d",&a,&b);
            sum=a*b;//下面会改变ab的值
            if(a<b) {temp=a;a=b;b=temp;}
            while(1)
            {
                temp=a%b;
                if(!temp)break;
                a=b;
                b=temp;
            }
            max=b;
            min=sum/max;
            printf("%d
",min);
        }
    }
    return 0;
}

26、平方和 和 立方和

#include <stdio.h>
#include <math.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int a,b,flag,temp;
        double sum1,sum2;
        while(n--)
        {
            sum1=0,sum2=0;
            scanf("%d%d",&a,&b);
            if(a>b){temp=a;a=b;b=temp;}
            flag=a%2;
            for(int i=a;i<=b;i+=2)
            {
                if(flag)//第一个是奇数
                {
                    sum2+=pow(i,3);
                    if(i+1<=b)sum1+=pow(i+1,2);
                }
                else//第一个是偶数
                {
                    sum1+=pow(i,2);
                    if(i+1<=b)sum2+=pow(i+1,3);
                }
            }
            printf("%.0lf %.0lf
",sum1,sum2);
        }
    }
    return 0;
}

27、统计整数

#include <stdio.h>
int main()
{
    int a[20],count,sum;
    sum=0,count=0;
    for(int i=0;i<20;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]<0)count++;
        sum+=a[i];
    }
    printf("%d %.1f
",count,(double)sum/(double)20);
    return 0;
}

28、等差数列

#include <stdio.h>
int main()
{
    int n,result;
    while(~scanf("%d",&n))
    {
        result=n*(4+3*(n-1))/2;
        printf("%d
",result);
    }
    return 0;
}

29、求最晚和最早日期

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int a,b,c;
        int max_a=1,max_b=1,max_c=1;
        int min_a=2015,min_b=12,min_c=31;
        while(n--)
        {
            scanf("%d%d%d",&a,&b,&c);
            if(a>max_a||(a==max_a&&b>max_b)||(a==max_a&&b==max_b&&c>max_c))
            {
                max_a=a;
                max_b=b;
                max_c=c;
            }
            if(a<min_a||(a==min_a&&b<min_b)||(a==min_a&&b==min_b&&c<min_c))
            {
                min_a=a;
                min_b=b;
                min_c=c;
            }
        }
        printf("%d %d %d
",max_a,max_b,max_c);
        printf("%d %d %d
",min_a,min_b,min_c);
    }
    return 0;
}

30、蟠桃记

#include <stdio.h>
int main()
{
    //动态规划
    //第n天吃了1个   总数1   1+n+1=2n  
    //第n-1天吃了3个 总数4     4+n+1=2n
    //第n-2天吃了6个 总数10     10+n+1=2n
    __int64 dp[30];
    dp[1]=1;
    for(int i=2;i<30;i++)
    {
        dp[i]=(dp[i-1]+1)*2;
    }
    int n;
    while(~scanf("%d",&n))
    {
        printf("%I64d
",dp[n]);
    }
    return 0;
}

31、素数之和(2153未通过 检查不出来错误)

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool isPrimeNumber(int n)
{
    for(int i=2;i<=sqrt(n);i++)
        if(n%i==0)return false;
    return true;
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int sum,num;
        for(int i=0;i<n;i++)
        {   sum=0;
            scanf("%d",&num);
            for(int i=2;i<=num;i++)
            {
                if(isPrimeNumber(i))sum+=i;
            }
            printf("%d
",sum);
        }
        if(n==32)break;//2153 有34条数据 这个输入错了
    }
    return 0;
}

32、完数

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int temp,a,b,sum,index,count;
        while(n--)
        {
            count=0;
            scanf("%d%d",&a,&b);
            if(a>b){temp=a;a=b;b=temp;}
            for(int i=a;i<=b;i++)
            {
                sum=1;
                for(int j=2;j<i;j++)
                {
                    if(i%j==0)sum+=j;
                }
                if(sum==i)count++;
            }
            printf("%d
",count);
        }
    }
    return 0;
}

33、九九乘法表

#include <stdio.h>
int main()
{
    int num,val;
    while(~scanf("%d",&num))
    {
        for(int i=1;i<=num;i++)
        {
            for(int j=1;j<=num;j++)
            {
                val=i*j;
                if(val<10)
                    printf("   %d",i*j);
                else
                    printf("  %d",i*j);
            }
            printf("
");
        }
        printf("
");
        for(int c=1;c<=num;c++)
        {
            for(int d=1;d<=num;d++)
            {
                if(c>=d)
                {
                    val=c*d;
                    if(val<10)
                        printf("   %d",val);
                    else
                        printf("  %d",val);
                }
            }
            printf("
");
        }
        printf("
");
        for(int a=1;a<=num;a++)
        {
            for(int b=1;b<=num;b++)
            {
                if(a<=b)
                {
                    val=a*b;
                    if(val<10)
                        printf("   %d",val);
                    else
                        printf("  %d",val);
                }
                else
                    printf("    ");
            }
            printf("
");
        }
    
    }
    return 0;
}

34、放大的X

#include <stdio.h>
int main()
{
    int num,n,flag;
    while(~scanf("%d",&num))
    {
        while(num--)
        {
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            {
                flag=0;
                for(int j=1;j<=n;j++)
                {
                    
                    if(j==i||j==n-i+1){printf("X");flag++;}
                    else printf(" ");
                    if(flag==2||(flag==1&&n%2==1&&2*i-1==n))break;
                }
                printf("
");
            }
            printf("
");
        }
    
    }
    return 0;
}

35、空心三角形

#include <stdio.h>
int main()
{
    int num,n,ch,flag;
    scanf("%d",&num);
    while(num--)
    {
            getchar();
            scanf("%c%d",&ch,&n);
            for(int i=1;i<=n;i++)
            {
                    flag=0;
                    for(int j=1;j<=2*n-1;j++)
                    {
                        if(i==1&&j<n)printf(" ");
                        else if(i==1&&j==n){printf("%c",ch);break;}
                        else if(i==n)printf("%c",ch);
                        else if(j==n-i+1||j==n+i-1){printf("%c",ch);flag++;if(flag==2)break;}
                        else printf(" ");
                    }
                    printf("
");
             }
             printf("
");
        
    }
    return 0;
}

36、水果价格(C++通过)

#include <stdio.h>
#include <iostream>
using namespace std;
void my_print(double *p)
{
    double price[4]={1.5,1.4,1.48,1.08};
    printf("       apple  orange banana pineapple sum
");
    printf("price  ");
    int i;
    double temp,sum=0;
    for(i=0;i<4;i++)
    {
        temp=p[i]*price[i];
        sum+=temp;
        if(temp>=10)printf("%.2f  ",temp);
        else printf("%.2f   ",temp);
        if(i==3)printf("   ");//若是pineapple 多加三个空格
    }
    if(sum>=10)printf("%.2f  
",sum);
    else printf("%.2f   
",sum);
    printf("weight ");
    sum=0;
    for(i=0;i<4;i++)
    {
        sum+=p[i];
        if(p[i]>=10)printf("%.2f  ",p[i]);
        else printf("%.2f   ",p[i]);
        if(i==3)printf("   ");//若是pineapple 多加三个空格
    }
    if(sum>=10)printf("%.2f  
",sum);
    else printf("%.2f   
",sum);
}
int main()
{
    int n;
    char d;
    double p[4],g; 
    while(~scanf("%d",&n))
    {
        for(int i=0;i<4;i++)p[i]=0;
        while(n--)
        {
            cin>>d>>g;//scanf不会写
            switch(d)
            {
                case 'a':p[0]+=g;break;
                case 'o':p[1]+=g;break;
                case 'b':p[2]+=g;break;
                case 'p':p[3]+=g;break;
            }
        }
        my_print(p);
        printf("
");
    }
    return 0;
}
#include <stdio.h>
int main()
{
    int N,i;
    char d ;
    double g,price_sum,weight_sum;
    while (~scanf ("%d",&N))
    {
        double a_sum=0.0,o_sum=0.0,b_sum=0.0,p_sum=0.0 ;
        for (i=0 ;i<N ;i++ )
        {
            getchar ();
            scanf ("%c %lf",&d,&g) ;
            if (d=='a') a_sum = a_sum+g ;
            if (d=='o') o_sum = o_sum+g ;
            if (d=='b') b_sum = b_sum+g ;
            if (d=='p') p_sum = p_sum+g ;
        }    
        price_sum = a_sum*1.5+o_sum*1.4+b_sum*1.48+p_sum*1.08 ;
        weight_sum = a_sum+o_sum+b_sum+p_sum ;
        printf ("       apple  orange banana pineapple sum
");
        printf ("price  %-7.2f%-7.2f%-7.2f%-10.2f%-7.2f
",a_sum*1.5,o_sum*1.4,b_sum*1.48,p_sum*1.08,price_sum) ;//-代表左对齐
        printf ("weight %-7.2f%-7.2f%-7.2f%-10.2f%-7.2f
",a_sum,o_sum,b_sum,p_sum,weight_sum) ;//不带-右对齐
        printf ("
") ;
    }
    return 0 
}

37、奇数的乘积

#include <stdio.h>
int main()
{
    int n,num,result;
    while(~scanf("%d",&n))
    {
        result=1;
        while(n--)
        {
            scanf("%d",&num);
            if(num%2==1)result*=num;
        }
        printf("%d",result);
    }
    return 0;
}

38、素数表

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool isPrimeNumber(int n)
{
        if(n==1)return false;
    for(int i=2;i<=sqrt(n);i++)
        if(n%i==0)return false;
    return true;
    
}
int main()
{
    int a,b,temp,count;
    while(~scanf("%d%d",&a,&b))
    {
        count=0;
        if(a>b){temp=a;a=b;b=temp;}
        for(int i=a;i<=b;i++)
        {
            if(isPrimeNumber(i))
            {
                count++;
                printf("%d ",i);
                if(count%10==0)printf("
");
            }
        }
    }
    return 0;
}

39、亲数和

#include <stdio.h>
int main()
{
    int num,a,b,sum1,sum2;
    while(~scanf("%d",&num))
    {
        while(num--)
        {
            scanf("%d%d",&a,&b);
            sum1=0;sum2=0;
            for(int i=1;i<a;i++)
                if(a%i==0)sum1+=i;
            for(int j=1;j<b;j++)
                if(b%j==0)sum2+=j;
            if(a==sum2&&b==sum1)printf("YES
");
            else printf("NO
");
        }
    }
    return 0;
}

40、分拆素数和

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool isPrimeNumber(int n)
{
    if(n==1)return false;
    for(int i=2;i<=sqrt(n);i++)
        if(n%i==0)return false;
    return true;
    
}
int findMaxPrimeNumber(int n,int* a)
{
    for(int i=0;i<1229;i++)
        if(a[i]>n)
            return i;

}
int main()
{
    int cur=0;
    int pr[1228]={0};
    for(int i=2;i<10000;i++)
    {
        if(isPrimeNumber(i))
            pr[cur++]=i;
    }
    int num,n;
    while(~scanf("%d",&num))
    {
        while(num--)
        {
            scanf("%d",&n);
            int max_ind=findMaxPrimeNumber(n,&pr[0]);
            int count=0;
            for(int i=0;i<max_ind;i++)
            {
                if(i>n/2)break;
                for(int j=i+1;j<max_ind;j++)
                {
                    if(pr[i]+pr[j]>n)break;
                    if(pr[i]+pr[j]==n) count++;
                }
            }
            printf("%d
",count);
        }
    }
    return 0;
}

41、求斐波拉切数列

#include <stdio.h>
int main()
{
    int dp[20]={0};
    dp[0]=1;
    dp[1]=1;
    for(int i=2;i<20;i++)
        dp[i]=dp[i-1]+dp[i-2];
    int n;
    while(~scanf("%d",&n))
    {
        printf("%d
",dp[n-1]);
    }
    return 0;
}

42、统计分数

#include <stdio.h>
int main()
{

    int n,count;
    double num;
    while(~scanf("%d",&n))
    {
        if(n==0){printf("0");continue;}
        count=0;
        while(n--)
        {
            scanf("%lf",&num);
            if(num<60)count++;
        }
        printf("%d
",count);
    }
    return 0;
}

43、平均值问题

#include <stdio.h>
int main()
{
    int n,count;
    double num,sum,dp[80];
    while(~scanf("%d",&n))
    {
        count=0,sum=0;
        for(int i=0;i<n;i++)
        {
            scanf("%lf",&num);
            dp[i]=num;
            sum+=num;
        }
        sum=sum/(double)n;
        for(int i=0;i<n;i++)
            if(dp[i]>=sum)count++;
        printf("%.6f %d
",sum,count);
    }
    return 0;
}

44、统计高于平均分人数

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int index=0,count=0;
 5     double num,sum=0,dp[40]={0};
 6     while(1)
 7     {
 8         scanf("%lf",&num);
 9         if(num<0)break;
10         dp[index++]=num;
11         sum+=num;
12     }
13     sum=sum/(double)index;
14     for(int i=0;i<index;i++)
15         if(dp[i]>sum)count++;
16     printf("%d
",count);
17     return 0;
18 }

45、调换数组

#include <stdio.h>
int main()
{
    int min_index,max_index,n,num,dp[40],temp;
    while(~scanf("%d",&n))
    {
        scanf("%d",&num);
        dp[0]=num;
        min_index=0,max_index=0;
        for(int i=1;i<n;i++)
        {
            scanf("%d",&num);
            dp[i]=num;
            if(dp[min_index]>num)min_index=i;
            if(dp[max_index]<num)max_index=i;
        }
        temp=dp[min_index];
        dp[min_index]=dp[max_index];
        dp[max_index]=temp;
        for(int j=0;j<n-1;j++)
            printf("%d ",dp[j]);
        printf("%d
",dp[n-1]);
    }
    return 0;
}

46、排序问题

#include <stdio.h>
void sort(int a[],int n)
{
    int flag,temp;
    for(int i=0;i<n-1;i++)
    {
        flag=0;
        for(int j=0;j<n-1;j++)
        {
            if(a[j]<a[j+1])//最小的上浮
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
                flag=1;
            }
        }
        if(flag==0)break;
    }
}
int main()
{

    int min_index,max_index,n,num,dp[80],temp;
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d",&num);
            dp[i]=num;
        }
        sort(dp,n);
        for(int j=0;j<n;j++)
            printf("%d ",dp[j]);
        printf("
");
    }
    printf("
");
    return 0;
}

47、奇偶间谍

#include <stdio.h>
int isSpy(int a,int b,int c)
{
    int x=a%2,y=b%2,z=c%2;
    if(x==y&&x==z)return -1;
    if(x==y&&x!=z)return 0;
    if(x==z&&x!=y)return 1;
    if(y==z&&x!=y)return 2;

}
int main()
{
    int dp[10];
    int i,index;
    while(~scanf("%d%d%d%d%d%d%d%d%d%d",&dp[0],&dp[1],&dp[2],&dp[3],&dp[4],&dp[5],&dp[6],&dp[7],&dp[8],&dp[9]))
    {
        for(i=2;i<10;i++)
        {
            index=isSpy(dp[i-2],dp[i-1],dp[i]);
            if(index!=-1)
            {
                printf("%d
",dp[i-index]);
                break;
            }
        }
    }
    return 0;
}

48、求质数

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool isPrimeNumber(int n)
{
    if(n==1)return false;
    for(int i=2;i<=sqrt(n);i++)
        if(n%i==0)return false;
    return true;
    
}
int main()
{
    int a,b,temp,count;
    while(~scanf("%d%d",&a,&b))
    {
        count=0;
        if(a>b){temp=a;a=b;b=temp;}
        for(int i=a;i<=b;i++)
        {
            if(isPrimeNumber(i))
                count++;
        }
        printf("%d
",count);
    }
    return 0;
}

49、卖鸭子

#include <stdio.h>
int main()
{
    //   卖出   剩余  总数
      //7  4       2    (2+1)*2=6
    //6  14-6=8  6    (6+1)*2=14 
    int dp[8],n;
    dp[7]=2;
    for(int i=6;i>0;i--)
    {
        dp[i]=2*(dp[i+1]+1);
    }
    while(~scanf("%d",&n))
    {
        printf("%d %d
",2*(dp[n]+1)-dp[n],dp[n]);
    }
    return 0;
}

50、十进制转二进制

#include <stdio.h>
int main()
{
    int a[10],n,count;
    while(~scanf("%d",&n))
    {
        if(n==0){printf("0
");continue;}
        count=0;
        while(n)
        {
            a[count++]=n%2;
            n/=2;
        }
        for(int i=count-1;i>=0;i--)
            printf("%d",a[i]);
        printf("
");
    
    }
    return 0;
}

51、开关灯

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int a[21]={0};
        if(n==1){printf("0
");continue;}
        for(int i=2;i<=n;i++)
            for(int j=1;j<=20;j++)
                if(j%i==0)
                    a[j]=(a[j]==0?1:0);
        for(int k=1;k<=n;k++)
            printf("%d",a[k]);
        printf("
");
    }
    return 0;
}

52、回文平方数

#include <stdio.h>
//进制转换 取余倒序 5%2=1 5/2=2; 2%2=0 2/2=1 ;1%2=1 1/2=0; 5=101
char number[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'};
int D2R(int num,int r,char *ch)//将十进制数num转为r进制数 返回的size为所求数的第一位的位置(倒序)
{    int mod_num,i=0,flag=0;
    if(num<0){num=-num;flag=1;}
    if(num==0){ch[i++]='0';}
    while(num)
    {
        mod_num=num%r;
        ch[i++]=number[mod_num];
        num/=r;
    }
    if(flag)ch[i++]='-';
    return i-1;
}
void printD2R(char *ch,int size)
{
    for(int j=size;j>=0;j--)
    {
       printf("%c",ch[j]);
    }
}
int isAnswer(char* ch,int size)
{
    int i=0,j=size,flag=1;
    while(!(i-1==j)&&!(i==j))
    {
        if(ch[i]!=ch[j]){flag=0;break;}
        i++,j--;
    }
    return flag;
}
int main()
{
    int r,size,i,j,size2;
    char ch[1000],ch2[1000];
    scanf("%d",&r);
    __int64 num;
    for(i=1;i<=300;i++)
    {
        num=(__int64)i*(__int64)i;
        size=D2R(num,r,ch);
        if(isAnswer(ch,size))
        {
            size2=D2R(i,r,ch2);
            printD2R(ch2,size2);
            printf(" ");
            printD2R(ch,size);
            printf("
");
        }
    }
    return 0;
}

53、进制转换

#include <stdio.h>
//进制转换 取余倒序 5%2=1 5/2=2; 2%2=0 2/2=1 ;1%2=1 1/2=0; 5=101
char number[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'};
int D2R(int num,int r,char *ch)//将十进制数num转为r进制数 返回的size为所求数的第一位的位置(倒序)
{    int mod_num,i=0,flag=0;
    if(num<0){num=-num;flag=1;}
    if(num==0){ch[i++]='0';}
    while(num)
    {
        mod_num=num%r;
        ch[i++]=number[mod_num];
        num/=r;
    }
    if(flag)ch[i++]='-';
    return i-1;
}
int main()
{
    char ch[100];
    int n,i,num,r,size;
    while(~scanf("%d",&n))
    {
        while(n--)
        {
            scanf("%d%d",&num,&r);
            size=D2R(num,r,ch);
            for(i=size;i>=0;i--)
            {
                printf("%c",ch[i]);
            }
            printf("
");
        }
    }
    return 0;
}

54、删除数组元素

#include <stdio.h>
//双指针法 删除指定元素
void delf(int a[],int* n,int del)
{
    int i=0,count=0;
    while(i<*n)
    {
        if(a[i]==del)i++;
        else a[count++]=a[i++];
    }
    *n=count;
}
int main()
{
    int n,del,a[100];
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        scanf("%d",&del);
        delf(a,&n,del);
        if(n==0){printf("Empty array!
");continue;}
        for(int i=0;i<n-1;i++)
            printf("%d ",a[i]);
        printf("%d
",a[n-1]);
    }
    return 0;
}

55、删除数组重复元素

#include <stdio.h>
//遍历两遍 k是删除完之后的数组大小
int delf(int a[],int n)
{
    int i,j,k=0;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n&&a[j]-a[i];j++);//检查第i项之后是否有值等于a[i]
        if(j==n)a[k++]=a[i];//若后方没有与a[i]相同的 放入数组中
    }
    return k;
}
int main()
{
    int n,del,a[100];
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        n=delf(a,n);
        for( i=0;i<n-1;i++)
            printf("%d ",a[i]);
        printf("%d
",a[n-1]);
    }
    return 0;
}

56、循环数组

 1 #include <stdio.h>
 2 //数组右移k位相当于翻转前1~n-k;再翻转n-k~n;再翻转1~n
 3 void Reverse(int* a,int p,int q)
 4 {
 5     int temp;
 6     while(!(p==q)&&!(q+1==p))
 7     {
 8         temp=a[p];
 9         a[p]=a[q];
10         a[q]=temp;
11         p++,q--;
12     }
13 }
14 void my_print(int* a,int n)
15 {
16    for(int i=0;i<n-1;i++)
17       printf("%d ",a[i]);
18     printf("%d
",a[n-1]);
19 }
20 void RightShift(int* a,int k,int n)
21 {
22     Reverse(a,0,n-k-1);
23     Reverse(a,n-k,n-1);
24     Reverse(a,0,n-1);
25 }
26 int main()
27 {
28     int n,k,a[100];
29     while(~scanf("%d",&n))
30     {
31         for(int i=0;i<n;i++)
32             scanf("%d",&a[i]);
33         scanf("%d",&k);
34         RightShift(a,k%n,n);//注意 k%n
35         my_print(a,n);
36     }
37     return 0;
38 }

57、菲波那切数列部分和

#include <stdio.h>
int fib(int n)
{
    if(n==1||n==2) return 1;
    else return fib(n-1)+fib(n-2);
}
int main()
{
    int a,b;
    while(~scanf("%d%d",&a,&b))
    {
        int sum=0;
        int i=1,cur;
        while(1)
        {
            cur=fib(i++);
            if(cur>=a&&cur<=b)sum+=cur;
            if(cur>b)break;
        }
        printf("%d
",sum);
    }
    return 0;
}

58、杨辉三角

#include <stdio.h>
__int64 fun(__int64 n,__int64 k)//从n开始阶乘k项
{
    if(k>0) return n*fun(n-1,k-1);
    else return 1;
}
__int64 Select(__int64 n,__int64 k)//C k n 选择
{
    if(k==0||n==0)return 1;
    if(k>n-k)return Select(n,n-k);
    else return  fun(n,k)/fun(k,k);
}
int main()
{
    int n,num;
    while(~scanf("%d",&n))
    {
        while(n--)
        {
            scanf("%d",&num);
            for(int i=0;i<num;i++)
            {
                for(int j=0;j<i;j++)
                    printf("%I64d ",Select(i,j));
                printf("1
");
            }
            printf("
");
        }
    }
    return 0;
}

59、数字金字塔

#include <stdio.h>
#include <malloc.h>
void my_print(int** a,int n)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<i+1;j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("
");
    }
}
//动态规划 子问题为高为2的金字塔
void fun(int** a,int n)
{
    if(n==1) return;
    int i=n-2,j,down,right;
    for(j=0;j<n-1;j++)//求第n-1行 高为2的金字塔 塔顶的最大值 最大值存入第n-1行
    {
        down=a[i][j]+a[i+1][j];
        right=a[i][j]+a[i+1][j+1];
        if(down>=right)a[i][j]=down;
        else a[i][j]=right;
    }
    fun(a,n-1);
}
int main()
{
    int n,max=0,i,j;
    scanf("%d",&n);
    //动态分配内存
    int **a=(int**)malloc(n*sizeof(int*));
    for(i=0;i<n;i++)a[i]=(int*)malloc(n*sizeof(int));
    //输入
    for(i=0;i<n;i++)
    {
        for(int j=0;j<i+1;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    fun(a,n);
    printf("%d
",a[0][0]);
    return 0;
}

 60、发牌

#include <stdio.h>
int main()
{
    int a[4][13]={0};//记录花色 0-c,1-d,2-h,3-s
    int b[4][13]={0};//记录大小
    int m=0,n=0;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<13;j++)
        {
            if(m<=3)
            {
                a[m][n]=i;
                b[m][n]=j;
                m++;
            }
            else if(m==4)
            {
                m=0;
                n++;
                a[m][n]=i;
                b[m][n]=j;
                m++;
            }
        }
    }
    int num;
    while(~scanf("%d",&num))
    {
        num--;
        for(int k=0;k<13;k++)
        {
            //0-c,1-d,2-h,3-s
            if(a[num][k]==0)printf("c ");
            else if(a[num][k]==1)printf("d ");
            else if(a[num][k]==2)printf("h ");
            else printf("s ");
            if(k==12)printf("%d
",b[num][k]);
            else printf("%d ",b[num][k]);
        }
    }
    return 0;
}

61、稀疏矩阵

#include <stdio.h>
#include <malloc.h>
void my_print(int** a,int m,int n)
{
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(a[i][j]!=0)
            {
                printf("%d %d %d
",i+1,j+1,a[i][j]);
            }
        }
    }
}
int main()
{
    int m,n,i,j;
    while(~scanf("%d%d",&m,&n))
    {
        int** a=(int**)malloc(sizeof(int*)*m);
        for(i=0;i<m;i++)a[i]=(int*)malloc(sizeof(int)*n);
        for(i=0;i<m;i++)
            for(j=0;j<n;j++)
                scanf("%d",&a[i][j]);
                
        my_print(a,m,n);
        printf("
");
    }
    return 0;
}

62、矩阵问题

#include <stdio.h>
#include <malloc.h>
void my_print(int ** a,int m,int n)
{
    int i,j;
    for( i=0;i<m;i++)
    {
        for( j=0;j<n-1;j++)
            printf("%d ",a[i][j]);
        printf("%d
",a[i][j]);
    }
    for( i=m-2;i>=0;i--)
    {
        for( j=0;j<n-1;j++)
        {
            if(a[i][j]==2)    printf("3 ");
            else printf("%d ",a[i][j]);
        }
        printf("%d
",a[i][j]);
    }
}
int main()
{
    int num,m,n,i,j;
    while(~scanf("%d",&num))
    {
        m=num+1;
        n=2*num+1;
        int **a=(int**)malloc(sizeof(int*)*m);
        for(i=0;i<m;i++)a[i]=(int*)malloc(sizeof(int)*n);
        for(i=0;i<m;i++)
            for(j=0;j<n;j++)
            {
                if(i==j||j==n-i-1)a[i][j]=1;
                else if(j>i&&j<n-i-1)a[i][j]=2;
                else if(j<i)a[i][j]=4;
                else a[i][j]=5;
            }
        my_print(a,m,n);
    }
    return 0;
}

63、倒序

#include <stdio.h>
#include <string.h>
void my_print(char* str)
{
    int len=strlen(str);
    for(int i=len-1;i>=0;i--)printf("%c",str[i]);
    printf("
");
}
int main()
{
    int n;scanf("%d",&n);
    char ch[1000];
    while(n--)
    {
        getchar();
        scanf("%[^
]",ch);
        my_print(&ch[0]);
    }
    return 0;
}

64、统计字母

#include <stdio.h>
#include <string.h>
void my_print(int * result)
{
    for(int i=0;i<26;i++)
    {
        if(result[i]>0)
            printf("%c:%d
",'A'+i,result[i]);
    }
}
void fun(char *str,int* result)
{
    for(int i=0;i<26;i++)result[i]=0;
    char temp;
    while(*str)
    {
        if(*str=='!'){str++;continue;}
        if(*str>='a'&&*str<='z')
            temp=*str-32;
        else temp=*str;
        result[(int)(temp-'A')]++;
        str++;
    }
    my_print(result);
}
int main()
{
    char ch[100];
    int result[26]={0};
    scanf("%s",ch);
    fun(&ch[0],result);
    while(getchar&&~scanf("%s",ch))fun(&ch[0],result);
    return 0;
}

65、求小数位数个数

#include <stdio.h>
#include <string.h>
int fun(char* str)
{
    int flag=0,count=0;
    while(*str)
    {
        if(!flag&&*str=='.')flag=1;
        else if(flag)count++;
        str++;
    }
    return count;
}
int main()
{
    char ch[100];
    scanf("%s",&ch);
    printf("%d
",fun(&ch[0]));
    while(getchar()&&~scanf("%s",&ch))printf("%d
",fun(&ch[0]));
    return 0;
}

66、加密

#include <stdio.h>
#include <string.h>
void fun(char* str)
{
    char *origin=str;
    while(*str)
    {
        if(*str>='0'&&*str<='9')*str='a'+*str-'0';
        else if(*str>='a'&&*str<='j')*str='0'+*str-'a';
        str++;
    }
    printf("%s
",origin);
}
int main()
{
    char ch[100];
    scanf("%s",ch);
    fun(&ch[0]);
    while(getchar&&~scanf("%s",ch))fun(&ch[0]);
    return 0;
}

67、求绝对值

#include <stdio.h>
#include <string.h>
void fun(char* str)
{
    if(*str=='-') printf("%s
",str+1);
    else printf("%s
",str);
}
int main()
{
    char ch[1000];
    scanf("%s",ch);
    fun(&ch[0]);
    while(getchar&&~scanf("%s",ch))fun(&ch[0]);
    return 0;
}

68、请给我加密

#include <stdio.h>
#include <string.h>
void fun(char* str,int key)
{
    char *origin=str;
    int a[100];
    int size=0,i;
    while(*str)
    {
        if(*str>='a'&&*str<='z')a[size++]=*str-'a'+key+1;
        else if(*str>='A'&&*str<='Z')a[size++]=*str-'A'+key+1;
        else if(*str==' ')a[size++]=0;
        else a[size++]=*str-''+100;
        str++;
    }
    for(i=0;i<size-1;i++)printf("%d ",a[i]);printf("%d
",a[i]);
}
int main()
{
    int n,key;
    char ch[1000];
    scanf("%d",&n);
    while(n--)
    {
        getchar();
        scanf("%[^
]",&ch);
        getchar();
        scanf("%d",&key);
        fun(&ch[0],key);
    }
    return 0;
}

69、进制转换

#include <stdio.h>
//进制转换 取余倒序 5%2=1 5/2=2; 2%2=0 2/2=1 ;1%2=1 1/2=0; 5=101
char number[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'};
int D2R(int num,int r,char *ch)//将十进制数num转为r进制数 返回的size为所求数的第一位的位置(倒序)
{    int mod_num,i=0,flag=0;
    if(num<0){num=-num;flag=1;}
    if(num==0){ch[i++]='0';}
    while(num)
    {
        mod_num=num%r;
        ch[i++]=number[mod_num];
        num/=r;
    }
    if(flag)ch[i++]='-';
    return i-1;
}
int main()
{
    char ch[100];
    int i,num,r,size;
    while(~scanf("%d%d",&num,&r))
    {
        size=D2R(num,r,ch);
        for(i=size;i>=0;i--)
        {
            printf("%c",ch[i]);
        }
        printf("
");
    }
    return 0;
}

70、日期

#include <stdio.h>
#include <string.h>
//Sun,Mon,Tue,Wed,Thu,Fri,Sat
char *a[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int size=7;
void fun(char* ch)
{
    for(int i=0;i<size;i++)
        if(!strncmp(ch,a[i],strlen(ch))){printf("%s
",a[i]);break;}
}
int main()
{
    char ch[10];
    scanf("%s",&ch);
    fun(&ch[0]);
    while(getchar()&&~scanf("%s",&ch))
    {
        fun(&ch[0]);
    }
    return 0;
}

71、单词统计

#include <stdio.h>
#include <string.h>
int CountWords(char str[])
{
    int count=0;
    int flag=0;
    while(*str)
    {
        if(*str!=' ')flag=1;
        else if(flag==1&&*str==' '){flag=0;count++;}
        str++;
    }
    return count+flag;
}
int main()
{
    char ch[1000];
    scanf("%[^
]",&ch);
    printf("%d
",CountWords(&ch[0]));
}

72、删除字符

#include <stdio.h>
#include <string.h>
void fun(char* str,char del)
{
    char *origin=str;
    char *p1=str,*p2=str;
    while(*p2)
    {
        if(*p2==del)p2++;
        else *p1++=*p2++;
        if(*p2=='')*p1='';
    }
    printf("%s",origin);
}
int main()
{
    char ch[20],del;
    scanf("%[^
]",&ch);
    getchar();
    scanf("%c",&del);
    fun(&ch[0],del);
}

73、手机短号

#include <stdio.h>
#include <string.h>
void fun(char* str)
{
    printf("6");
    for(int i=6;i<11;i++)
        printf("%d",str[i]-'0');
    printf("
");
}
int main()
{
    int n;
    scanf("%d",&n);
    char a[13];
    for(int i=0;i<n;i++)
    {
        getchar();
        scanf("%s",a);
        fun(&a[0]);
    }
}

74、字符串统计

#include <stdio.h>
#include <string.h>
void fun(char* str)
{
    int count=0;
    while(*str)
    {
        if(*str>='a'&&*str<='z')count++;
        str++;
    }
    printf("%d
",count);
}
int main()
{
    int n;
    scanf("%d",&n);
    char ch[1000];
    while(n--)
    {
        getchar();
        scanf("%s",&ch);
        fun(&ch[0]);
    }
    return 0;
}

75、弟弟的作业

#include <stdio.h>
#include <string.h>
int fun(char* str)
{
    int a=0,b=0,c=0,flag=0;
    char f;
    while(*str)
    {
        if(!flag&&*str>='0'&&*str<='9')a=a*10+*str-'0';
        else if(!flag&&(*str=='+'||*str=='-'))flag=1,f=*str;
        else if(flag==1&&*str>='0'&&*str<='9')b=b*10+*str-'0';
        else if(*str=='=')flag=2;
        else if(flag==2&&*str>='0'&&*str<='9')c=c*10+*str-'0';
        str++;
    }
    if((f=='+'&&a+b==c)||(f=='-'&&a-b==c))return 1;
    else return 0;
}
int main()
{
    int count=0;
    char ch[1000];
    scanf("%s",&ch);
    count+=fun(&ch[0]);
    while(getchar()&&~scanf("%s",&ch))count+=fun(&ch[0]);
    printf("%d
",count);
    return 0;
}

76、字符串排序

#include <stdio.h>
#include <string.h>
char* fun(char* str)
{
    int size=strlen(str);
    int i,j,flag;
    char temp;
    for(i=0;i<size-1;i++)
    {
        flag=0;
        for(j=1;j<size-i;j++)
        {
            if(str[j-1]>str[j])
            {
                temp=str[j-1];
                str[j-1]=str[j];
                str[j]=temp;
                flag=1;
            }
        }
        if(!flag)break;
    }
    return str;
}
int main()
{
    int count=0;
    char ch[1000];
    scanf("%s",&ch);
    printf("%s
",fun(&ch[0]));
    while(getchar()&&~scanf("%s",&ch))printf("%s
",fun(&ch[0]));
    return 0;
}

77、回文问题

#include <stdio.h>
#include <string.h>
char* fun(char* str)
{
    int size=strlen(str);
    int i=0,j=size-1;
    while(i<j)
    {
        if(str[i]!=str[j]) return "No";
        i++,j--;
    }
    return "Yes";
}
int main()
{
    char ch[200];
    scanf("%s",&ch);
    printf("%s
",fun(&ch[0]));
    while(getchar()&&~scanf("%s",&ch))printf("%s
",fun(&ch[0]));
    return 0;
}

78、字符串中找整数

#include <stdio.h>
#include <string.h>
#include <malloc.h>
int m=20;
int n=50;
void fun(char* str)
{
    int size=0,i;
    char** str1=(char**)malloc(sizeof(char*)*m);
    for(i=0;i<10;i++)str1[i]=(char*)malloc(sizeof(char)*n);
    while(*str)
    {
        if(*str>='0'&&*str<='9')
        {
            int count=0;
            char* temp=str;
            while(*str>='0'&&*str<='9')count++,str++;
            strncpy(str1[size],temp,count);
            str1[size++][count]='';
        }
        str++;
    }
    //将0开头的0去掉
    for(i=0;i<size;i++)
    {
        if(*str1[i]=='0')
        {
            char *p=str1[i];
            while(*p=='0')p++;
            strcpy(str1[i],p);
        }
    }

    if(size>0)
    {
        printf("%d ",size);
        for(i=0;i<size-1;i++)printf("%s ",str1[i]);printf("%s
",str1[i]);
    }
    else printf("%d
",size);
}
int main()
{
    int i;
    char ch[500];
    scanf("%s",&ch);
    fun(&ch[0]);
    while(getchar()&&~scanf("%s",&ch))fun(&ch[0]);
    return 0;
}

79、子字符串排序

#include <stdio.h>
#include <string.h>
#include <malloc.h>
void sort(char** str,int size)
{

    int i,j,flag;
    char temp[10];
    for(i=0;i<size-1;i++)
    {
        flag=0;
        for(j=1;j<size-i;j++)
        {
            if(strcmp(str[j-1],str[j])>0)
            {
            
                strcpy(temp,str[j]);
                strcpy(str[j],str[j-1]);
                strcpy(str[j-1],temp);
                flag=1;
            }
        }
        if(!flag)break;
    }
}
void fun(char* str)
{
    int size=0,i;
    char** str1=(char**)malloc(sizeof(char*)*10);
    for(i=0;i<10;i++)str1[i]=(char*)malloc(sizeof(char)*10);
    while(*str)strcpy(str1[size++],str),str++;
    sort(str1,size);
    for(i=0;i<size;i++)printf("%s
",str1[i]);
}
int main()
{
    int i;
    char ch[100];
    scanf("%s",&ch);
    fun(&ch[0]);
    while(getchar()&&~scanf("%s",&ch))fun(&ch[0]);
    return 0;
}

80、平均分

#include <stdio.h>
#include <malloc.h>
typedef struct Student
{
    int num;
    char name[20];
    int year;
    int month;
    float grade1;
    float grade2;
    float grade3;
}Stu;//使用typedef后 Student是别名 Stu是结构体名 可以不用struct Stu声明 可直接用Stu声明
int main()
{
    int n,i;
    scanf("%d",&n);
        Stu *stus=(Stu*)malloc(sizeof(Stu)*n);
        for(i=0;i<n;i++)
        {
            scanf("%d%s%d%d%f%f%f",
                &stus[i].num,
                &stus[i].name,
                &stus[i].year,
                &stus[i].month,
                &stus[i].grade1,
                &stus[i].grade2,
                &stus[i].grade3);
        }
        for(i=0;i<n;i++)
        {
            printf("%d %s %d/%d %.0f %.0f %.0f %.0f
",
                stus[i].num,
                stus[i].name,
                stus[i].year,
                stus[i].month,
                stus[i].grade1,
                stus[i].grade2,
                stus[i].grade3,
                (stus[i].grade1+stus[i].grade2+stus[i].grade3)/(float)3);
        }
    return 0;
}

81、统计候选人的票数

#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct my_candidate
{
    char* name;
    int result;
}Candidate;
void my_print(Candidate *c,int count)
{
    printf("li:%d
",c[1].result);
    printf("zhang:%d
",c[0].result);
    printf("wang:%d
",c[2].result);
    printf("Wrong election:%d
",count);
}
char tolower(char c)//转化小写这一步没必要 测试里没有大写
{
    if(c>='A'&&c<='Z')
        return c+32;
    else return c;
}
char* strlowr(char* s)
{
    char *origin=s;
    for(;*s!='';s++)
    {
        *s=tolower(*s);
    }
    return origin;
}
int main()
{
    char s[20],*s1;
    int i,count=0;
    Candidate candidate[3];
    candidate[0].name="zhang";candidate[0].result=0;
    candidate[1].name="li";candidate[1].result=0;
    candidate[2].name="wang";candidate[2].result=0;
    for(i=0;i<10;i++)
    {
        scanf("%s",&s);
        s1=strlowr(&s[0]);
        if(!strcmp(s1,"zhang"))candidate[0].result++;
        else if(!strcmp(s1,"li"))candidate[1].result++;
        else if(!strcmp(s1,"wang"))candidate[2].result++;
        else count++;
    }
    my_print(candidate,count);
    return 0;
}

82、密码分析(c++)

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
typedef struct word
{
    char ch;
    int count;
}Word;
void sort(Word* word)
{
    int size=26;
    int i,j,flag;
    for(i=0;i<size-1;i++)
    {
        flag=0;
        for(j=1;j<size-i;j++)
        {
            if(word[j-1].count<word[j].count)swap(word[j-1],word[j]),flag=1;
        }
        if(!flag)break;
    }
}
void fun(char* str,Word* word)
{
    int i;
    for(i=0;i<26;i++){word[i].ch='A'+i;word[i].count=0;}
    while(*str)
    {
        if(*str>='a'&&*str<='z')word[*str-'a'].count++;
        else if(*str>='A'&&*str<='Z')word[*str-'A'].count++;
        str++;
    }
    sort(word);
    for(i=0;i<26;i++)
    {
        if(word[i].count==0)break;
        printf("%c %d
",word[i].ch,word[i].count);
    }
    printf("
");
}
int main()
{
    int i;
    Word word[26];
    char ch[100];
    scanf("%[^
]",&ch);
    fun(&ch[0],word);
    while(getchar()&&~scanf("%[^
]",&ch))fun(&ch[0],word);
    return 0;
}

83、学生信息(c++)

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <iostream>
using namespace std;
typedef struct my_stu
{
    int num;
    char name[20];
    char sex[10];
    int age;
    int grade;
}Stu;
void my_print(Stu* stus,int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%d %s %s %d %d
",stus[i].num,stus[i].name,stus[i].sex,stus[i].age,stus[i].grade);
    }
}
void sort(Stu* stus,int n)
{
    int flag;
    for(int i=0;i<n-1;i++)
    {
        flag=0;
        for(int j=1;j<n-i;j++)
        {
            if(stus[j-1].grade>stus[j].grade){swap(stus[j-1],stus[j]);flag=1;}
        }
        if(!flag)break;
    }
}
int main()
{
    Stu stus[10];
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d%s%s%d%d",&stus[i].num,&stus[i].name,&stus[i].sex,&stus[i].age,&stus[i].grade);
    sort(&stus[0],n);
    my_print(&stus[0],n);
    return 0;
}

84、求级数的和

#include <stdio.h>
#include <math.h>
double fun(double n)
{
    if(n!=1)return n*fun(n-1);
    else return 1;
}
double fun2(double x,int n)
{
    double re=pow(x,n)/fun(n);
    if(re>0.000001) 
    {
        if(n%2==1) return re+fun2(x,n+1);
        else return -re+fun2(x,n+1);
    }
    else return 0;
}
int main()
{
    double x;
    scanf("%lf",&x);
    printf("%.6f
",fun2(x,1)+1);
    return 0;
}

85、计算多项式的值

#include <stdio.h>
#include <math.h>
double fun(double n)
{
    if(n!=1)return n*fun(n-1);
    else return 1;
}
double fun1(int n)
{
    double re=0.5;
    for(int i=1;i<n;i++)
        re*=(0.5-i);
    return re;
}
double fun2(double x,double th,int n)
{
    double re=(pow(x,n)*fun1(n))/fun(n);
    if((re>0&&re>=th)||(re<0&&-re>=th)) 
        return re+fun2(x,th,n+1);
    else return 0;
}
int main()
{
    double x,th;
    while(~scanf("%lf%lf",&x,&th))
    {
        double re;
        if(th>1) re=0;
        else re=fun2(x,th,1)+1;
        printf("%.6f

",re);
    }
    return 0;
}

86、母牛的数量

#include <stdio.h>
#include <math.h>
//第几年 母牛数量
//1      1
//2      1+1
//3      2+1
//4      3+1
//5      4+2 此时第二个年头所有的牛都能生了
//6      6+3 此时第三个年头所有的牛都能生了
//n<=4 fun(n)=5 ;n>5 fun(n)=fun(n-1)+fun(n-3);
__int64 fun(int n)//递归会超时 
{
    if(n<=4)return n;
    else return fun(n-1)+fun(n-3);
}
int main()
{
    __int64 dp[55];
    dp[1]=1;
    dp[2]=2;
    dp[3]=3;
    dp[4]=4;
    for(int i=5;i<55;i++)
        dp[i]=dp[i-1]+dp[i-3];
    int n,year;
    while(~scanf("%d",&n))
    {
        int a=1,b=0;//a 代表成熟的母牛数量 b代表
        while(n--)
        {
            scanf("%d",&year);
            printf("%I64d
",dp[year]);
        }
    }
    return 0;
}

 87、发工资咯

#include <stdio.h>
int fun(int sum)
{
    int result=0;
    while(sum)
    {
        if(sum>=100){result+=sum/100;sum=sum%100;}
        else if(sum<100&&sum>=50){result+=sum/50;sum=sum%50;}
        else if(sum<50&&sum>=20){result+=sum/20;sum=sum%20;}
        else if(sum<20&&sum>=10){result+=sum/10;sum=sum%10;}
        else if(sum<10&&sum>=5){result+=sum/5;sum=sum%5;}
        else if(sum<5&&sum>=2){result+=sum/2;sum=sum%2;}
        else {result+=sum;sum=0;}
    }
    return result;
}
int main()
{
    int N,n,sum,salary,result;
    scanf("%d",&N);
    while(N--)
    {
        sum=0;result=0;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&salary);
            sum+=fun(salary);
        }
        printf("%d
",sum);
    }
    return 0;
}

88、你要乘坐的飞碟在这里(1923未通过)

#include <stdio.h>
int fun(char* str)
{
    int result=1;
    int temp;
    while(*str!='')
    {
        temp=*str-'A'+1;
        result*=temp;
        str++;
    }
    return result;
}
int main()
{
    char a[6],b[6];
    scanf("%s",a);getchar();
    scanf("%s",b);
    if(fun(&a[0])%47==fun(&b[0])%47)
        printf("GO
");
    else printf("STAY
");
    return 0;
}

89、字符串压缩

#include <stdio.h>
#include <string.h>
char tolower(char c)//转化小写
{
    if(c>='A'&&c<='Z')
        return c+32;
    else return c;
}
char* strlowr(char* s)
{
    char *origin=s;
    for(;*s!='';s++)
    {
        *s=tolower(*s);
    }
    return origin;
}
//双指针 第一个指针为当前大小 第二个指针为工作指针 
char *strcompress(char* str)
{
    char* head=str;
    char *p1=str,*p2=str;
    int count=1;
    while(*(p2)!='')
    {
        if(*(p2+1)!=''&&*(p2+1)==*p2)//后一个与前一个相同
            count++,p2++;
        else
        {
            if(count!=1)*(p1++)='0'+count,count=1;
            *(p1++)=*(p2++);
            if(*p2=='')*p1='';
        }
    }
    return head;
}
int main()
{
    //char* test="a"存储第一个字符a的地址 但是是只读的
    //char test[]="a" 可修改
    char ch[1000];
    scanf("%s",&ch);
    printf("%s
",strcompress(strlowr(&ch[0])));
    while(getchar()&&~scanf("%s",&ch))printf("%s
",strcompress(strlowr(&ch[0])));
    return 0;
}

90、选票统计

#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct my_candidate
{
    char name[20];
    int result;
}Candidate;
char tolower(char c)//转化小写
{
    if(c>='A'&&c<='Z')
        return c+32;
    else return c;
}
char* strlowr(char* s)
{
    char *origin=s;
    for(;*s!='';s++)
    {
        *s=tolower(*s);
    }
    return origin;
}
int find(Candidate* c,int size,char* s)
{
    for(int i=0;i<size;i++)
        if(!strcmp(c[i].name,s))return i;
    return -1;
}
int main()
{
    char s[20],*s1,size=0,target,max_index=0,i;
    Candidate* candidate=(Candidate*)malloc(sizeof(Candidate)*100);
    for(i=0;i<100;i++)candidate[i].result=0;

    scanf("%s",&s);s1=strlowr(&s[0]);
    strcpy(candidate[0].name,s1);
    candidate[0].result=1;
    size++;

    while(getchar()&&~scanf("%s",&s))
    {
        target=find(candidate,size,strlowr(&s[0]));
        if(target==-1){strcpy(candidate[size].name,strlowr(&s[0]));candidate[size].result=1;size++;}
        else
        {
            candidate[target].result++;
            if(target!=max_index&&candidate[target].result>candidate[max_index].result)max_index=target;
        }
    }
    printf("%s %d
",candidate[max_index].name,candidate[max_index].result);
    return 0;
}

91、数星星

#include <stdio.h>
#include <malloc.h>
typedef struct point
{
    int x;
    int y;
}Point;
int find(Point* p,int n,int x,int y)
{
    for(int i=0;i<n;i++)
        if(p[i].x==x&&p[i].y==y) return 1;
    return 0;
}
int main()
{

    int n,a,b,i,size=0;
    scanf("%d",&n);
    Point* p=(Point*)malloc(sizeof(Point)*n);
    for(i=0;i<n;i++){p[i].x=p[i].y=10001;}
    while(n--)
    {
        scanf("%d%d",&a,&b);
        if(!find(p,size,a,b))
        {
            p[size].x=a;
            p[size].y=b;
            size++;
        }
        else continue;
    }
    printf("%d
",size);
    return 0;
}

92、按出生日期排序

#include <stdio.h>
#include <malloc.h>
#include <iostream>
using namespace std;
typedef struct student
{
    char name[10];
    int birth[3];
}Stu;
void my_print(Stu* stu,int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%s %d-",stu[i].name,stu[i].birth[0]);
        if(stu[i].birth[1]<10)printf("0%d-",stu[i].birth[1]);
        else printf("%d-",stu[i].birth[1]);
        if(stu[i].birth[2]<10)printf("0%d
",stu[i].birth[2]);
        else printf("%d
",stu[i].birth[2]);
    }
}
void sort(Stu* stu,int n)
{
    int flag,i,j;
    for(int k=2;k>=1;k--)
    {
        for(i=0;i<n-1;i++)
        {
            flag=0;
            for(j=1;j<n-i;j++)
            {
                if(stu[j].birth[k]<stu[j-1].birth[k])
                {
                    swap(stu[j],stu[j-1]);
                    flag=1;
                }
            }
        if(!flag)break;
        }
    }
}
int main()
{
    int n,i;
    scanf("%d",&n);
    Stu* stu=(Stu*)malloc(sizeof(Stu)*n);
    for(i=0;i<n;i++)
        scanf("%s%d%d%d",&stu[i].name,&stu[i].birth[0],&stu[i].birth[1],&stu[i].birth[2]);
    sort(stu,n);
    my_print(stu,n);
    return 0;
}

93、考试排名(c++)

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <iostream>
using namespace std;
typedef struct student
{
    char name[10];
    int AC_num;
    int time;
}Stu;
int compute(char* ch,int score)
{
    if(*ch=='0'||*ch=='-')return 0;
    int a=0,b=0,flag=0;
    for(;*ch!='';ch++)
    {
        if(*ch=='('){flag=1;continue;}
        else if(!flag) a=a*10+(int)(*ch-'0');
        else if(flag&&*ch!=')')b=b*10+(int)(*ch-'0');
        else break;
    }
    return a+b*score;
}
void sort(Stu* stu,int size)
{
    int i,j,k,flag;
    for(k=0;k<3;k++)
    {
        for(i=0;i<size-1;i++)
        {
            flag=0;
            for(j=1;j<size-i;j++)
            {
                if((k==0&&strcmp(stu[j-1].name,stu[j].name)>0)||
                    (k==1&&stu[j-1].time>stu[j].time)||
                    (k==2&&stu[j-1].AC_num<stu[j].AC_num))
                {swap(stu[j-1],stu[j]);flag=1;}
            }
            if(!flag)break;
        }
    }
}
int main()
{
    int size=0,num,score,i,result;
    char name[10];
    Stu* stu=(Stu*)malloc(sizeof(Stu)*100);
    for(i=0;i<100;i++){stu[i].AC_num=stu[i].time=0;}
    scanf("%d%d",&num,&score);
    char ch[12][10];
    while(getchar()&&~scanf("%s",&name))
    {
        strcpy(stu[size].name,name);
        for(i=0;i<num;i++)
        {
            scanf("%s",&ch[i]);
            result=compute(&ch[i][0],score);
            if(result>0)
            {
                stu[size].AC_num+=1;
                stu[size].time+=result;
            }
        }
        size++;
    }
    sort(stu,size);
    for(i=0;i<size;i++)printf("%-10s %2d %4d
",stu[i].name,stu[i].AC_num,stu[i].time);
    return 0;
}

.

原文地址:https://www.cnblogs.com/lancelee98/p/12178359.html