首页 > 代码库 > 第六次作业

第六次作业

1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。

#include<stdio.h>
int main()
{
    int a,b,c,d,x,y,i;

    for(i=1000;i<=9999;i++)
    {
        a=i/1000;
        b=i%1000/100;
        c=i%1000%100/10;
        d=i%10;
        if(a==b||a==c||a==d||b==c||b==d||c==d)
        {
            continue;
        }
        else
        {
            x=a;
            a=d;
            d=x;
            x=b;
            b=c;
            c=x;
            y=a*1000+b*100+c*10+d;
            if(i==4*y)
            {
                printf("%d\n",i);
            }
        }

    }
    return 0;
}

技术分享

2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。

  样例: 输入123,    输出 6     June

            输入12345,输出 15   ***

#include<stdio.h>
int main()
{
    int i,a,sum=0;
    printf("输入任意一个多位的数字");
    scanf("%d",&i);
    while(1)
    {
        if(i<10&&i>0)
        {
            sum=sum+i;
            break;
        }
        a=i%10;
        sum=sum+a;
        i=i/10;
        if(i<10&&i>0)
        {
            sum=sum+i;
            break;
        }

    }
    switch(sum)
    {
    case 12:printf("December\n");break;
    case 11:printf("November\n");break;
    case 10:printf("October\n");break;
    case 9:printf("September\n");break;
    case 8:printf("August\n");break;
    case 7:printf("July\n");break;
    case 6:printf("June\n");break;
    case 5:printf("May\n");break;
    case 4:printf("April\n");break;
    case 3:printf("March\n");break;
    case 2:printf("February\n");break;
    case 1:printf("January\n");break;
    default:printf("***\n");
    }
    return 0;
}

技术分享

3.给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

   输入格式:输入在一行中给出A。

   输出格式:输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。

   输入样例:2

   输出样例:234  235  243  245  253  254

                  324  325  342  345  352  354

                  423  425  432  435  452  453

                  523  524  532  534  542  543

#include<stdio.h> 
int main()
{
    int a,b,c,d,i=0,sum=0;
    printf("输入一个不超过6的正整数A\n");
    scanf("%d",&a);
    b=a;
    while(b<=a+3)
    {
        c=a;
        while(c<=a+3)
        {
            d=a;
            while(d<=a+3)
            {
                if(b!=c&&b!=d&&c!=d)
                {
                    sum=b*100+c*10+d;
                printf("%3d",sum);
                i++;
                if(i!=6)
                printf(" ");
                if(i==6)
                {
                    printf("\n");
                    i=0;
                }
                }
                sum=0;
                d++;
            }
            c++;
        }
    b++;    
    }
    return 0;
}

技术分享

 

4. 万年历、看商品猜价格、自动出题器、猜拳游戏。(完成个人选定的题目)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int a,b,yu,zy,result,answer,d,i=0,y=0,x=0,m=0;
    float lu,zonglu;
    char op,yn;
    srand(time(NULL));
    while(i<=5)
 {
    a=rand()%100;
    b=rand()%100;
    d=rand()%4+1;
    switch(d)
    {
        case 1:op=+;result=a+b;break;
        case 2:op=-;result=a-b;break;
        case 3:op=*;result=a*b;break;
        case 4:op=/;result=a/b;zy=a%b;break;
    }
    if(d==4)
    {
        printf("%d%c%d=?\n",a,op,b);
        printf("请输入商和余数,用空格分开\n");
        scanf("%d %d",&answer,&yu);
         
       if(answer==result&&yu==zy)
         {
            printf("回答正确\n");
            y++;
            x++;
            m++;
         }
         else
          {
            printf("回答错误,正确的答案是%d %d\n",result,zy);
            x++;
        }
    }
    else
    {
        printf("%d%c%d=?\n",a,op,b);
        printf("请输入答案\n");
        scanf("%d",&answer);
 
       if(answer==result)
         {
            printf("回答正确\n");
            y++;
            x++;
            m++;
         }
         else
          {
            printf("回答错误,正确的答案是%d\n",result);
            x++;
        }
    }
    i++;
    if(i==5)
    {
        lu=m/5.0;
        printf("这次做对了%d道题,正确率为%.2f%%",m,lu*100);
        printf("继续吗? Y or N\n");
        scanf(" %c",&yn);
        if(yn==n)
        {
            zonglu=(float)y/x;
            printf("一共做了%d道题,做对了%d道题,正确率是%.2f%%",x,y,zonglu*100);
            break;
        }
        if(yn==y)
        {
            i=0;
            m=0;
        }
    }
 }
    return 0;
}

技术分享

附加题

  有16根火柴,可以拼出多少个形如“A+B=C”的等式,A、B、C是用火柴棍拼出的整数,且为一位数,输出该等式形式。

 注意:  1. 加号与等号各自需要两根火柴棍    2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0) 3. 16根火柴棍必须全部用上

  用火柴棍拼数字0-9的拼法如图所示: 

              技术分享

 

#include<stdio.h>
int main()
{
    int a,b,c,x,y,z;
    for(a=0;a<=9;a++)
    {
      for(b=0;b<=9;b++)
        {
           switch(a)
            {
            case 0:x=6;break;
            case 1:x=2;break;
            case 2:x=5;break;
            case 3:x=5;break;
            case 4:x=4;break;
            case 5:x=5;break;
            case 6:x=6;break;
            case 7:x=3;break;
            case 8:x=7;break;
            case 9:x=6;break;
            }
            switch(b)
            {
            case 0:y=6;break;
            case 1:y=2;break;
            case 2:y=5;break;
            case 3:y=5;break;
            case 4:y=4;break;
            case 5:y=5;break;
            case 6:y=6;break;
            case 7:y=3;break;
            case 8:y=7;break;
            case 9:y=6;break;
            }
            c=a+b;
                switch(c)
            {
            case 0:z=6;break;
            case 1:z=2;break;
            case 2:z=5;break;
            case 3:z=5;break;
            case 4:z=4;break;
            case 5:z=5;break;
            case 6:z=6;break;
            case 7:z=3;break;
            case 8:z=7;break;
            case 9:z=6;break;
            }
            if(x+y+z==12&&x!=y)
            {
                printf("%d+%d=%d\n",a,b,c);
            }
         }
    }
    return 0;
}

技术分享

 

 

 

实验总结:1.注意switch语句的使用,case后加 break

2.赋值是一个=     等于是两个==

3.利用时间产生随机数,注意多重嵌套的关系

4.交换数值用第三变量

知识点总结:1.对一个数去掉最后一位用/10,得到最后一位用%10

2.输入一串字符的经典用法:while((ch=getchar())!=‘\n‘)

3.无限循环中,利用循环体中加break语句跳出循环

第六次作业