• 第六次作业


    一、实验内容        

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

    代码:

    #include<stdio.h>
    int main()
    {    int a,b,c,d,n1,n2;
         for(a=1;a<10;a++)
         for(b=0;b<10;b++)
         for(c=0;c<10;c++)
         for(d=1;d<10;d++)
         {
             if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d)
                 {
                     n1=a*1000+b*100+c*10+d;
                     n2=d*1000+c*100+b*10+a;
                     if(n1==4*n2)
                     {
                           printf("这个四位数是%d
    ",n1);
                     }
                 }
        }
        return 0;
    } 

    程序运行结果:

    2.实验要求:

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

      样例: 输入123,    输出 6     June

                输入12345,输出 15   ***

    代码:

    #include<stdio.h>
    int main()
    {
        int x,m,sum=0;
        printf("请输入一个多位数:
    ");
        scanf("%d",&x);
        while(x!=0)
        {
            m=x%10;
            sum=sum+m;
            x=x/10;
        }
        printf("sum=%d
    ",sum);
        if(sum==1)
            printf("January
    ");
        else if(sum==2)
            printf("February
    ");
        else if(sum==3)
            printf("March
    ");
        else if(sum==4)
            printf("April
    ");
        else if(sum==5)
            printf("May
    ");
        else if(sum==6)
            printf("June
    ");
        else if(sum==7)
            printf("July
    ");
        else if(sum==8)
            printf("August
    ");
        else if(sum==9)
            printf("Septemper
    ");
        else if(sum==10)
            printf("Octorber
    ");
        else if(sum==11)
            printf("November
    ");
        else if(sum==12)
            printf("December
    ");
        else
            printf("***");
    }

    程序运行结果:

    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;
        printf("请输入一个不超过6的正整数:
    ");
        scanf("%d",&A);
        if(A>0&&A<=6)
        {
            for(b=A;b<=A+3;b++)
            for(c=A;c<=A+3;c++)
            for(d=A;d<=A+3;d++)
            {
                if(b!=c&&b!=d&&c!=d)
                {
                    printf("%d",b*100+c*10+d);
                    i++;
                    if(i%6!=0)
                    {
                        printf(" ");
                    }
                    else
                    {
                        printf("
    ");
    
                    }
                }
            }
        }
        else
        {
            printf("error
    ");
        }
        return 0;
    }

    程序运行结果:

    4.实验要求:自动出题器

    代码:

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    int main()
    {
        int a,b,c,d1,d2,g,s1,s2,n=0;
        char op,op1='Y';
        float k;
        while(op1=='Y')
        {
            for(n=1;n<=5;n++)
            {
                srand(time(NULL));
                a=rand()%100+1;
                b=rand()%100+1;
                c=rand()%100+1;
                g=0;
                if(c>=1&&c<=25)
                {
                    op='+';
                    printf("%d+%d=?",a,b);
                    printf("请输入你的答案:
    ");
                    scanf("%d",&s1);
                    s2=a+b;
                    if(s1==s2)
                    {
                        printf("回答正确");
                        g++;
                    }
                    else
                    {
                        printf("回答错误,正确答案是%d
    ",s2);
                    }
                }
                if(c>=26&&c<=50)
                {
                    op='-';
                    printf("%d-%d=?",a,b);
                    printf("请输入你的答案:
    ");
                    scanf("%d",&s1);
                    s2=a-b;
                    if(s1==s2)
                    {
                        printf("回答正确");
                        g++;
                    }
                    else
                    {
                        printf("回答错误,正确答案是%d
    ",s2);
                    }
                }
                if(c>=51&&c<=75)
                {
                    op='*';
                    printf("%d*%d=?",a,b);
                    printf("请输入你的答案:
    ");
                    scanf("%d",&s1);
                    s2=a*b;
                    if(s1==s2)
                    {
                        printf("回答正确");
                        g++;
                    }
                    else
                    {
                        printf("回答错误,正确答案是%d
    ",s2);
                    }
                }
                if(c>=76&&c<=100)
                {
                    op='/';
                    printf("%d/%d=?",a,b);
                    printf("请输入商和余数:
    ");
                    scanf("%d%d",&s1,&d1);
                    s2=a/b;
                    d2=a%b;
                    if(s1==s2&&d1==d2)
                    {
                        printf("回答正确");
                        g++;
                    }
                    else
                    {
                        printf("回答错误,商是%d,余数是%d
    ",s2,d2);
                    }
                }
            }
            k=(float)g/5;
            {
                printf("做对%d次,正确率%.2f",g,k);
            }
            printf("是否继续Y or N
    ");
            scanf("%c",&op1);
        }
        return 0;
    }

    程序运行结果:

    二、知识点总结

    1.对于有些题可以先穷举后优化减少循环次数;

    2.求a和b最大公约数:

    法一:设i为1; 如果a和b都能被这个i整除,则记下这个i; i+1重复上一步,直到等于a或b; i为最大公约数;

    法二:辗转相除法:a/b,令r为所得余数(0<=r<b)若r=0,算法结束b为答案;   互换:b→a,r→b,并返回第一步

    三、实验总结

    1,随机数字的表示为srand(time(NULL)); a=rand()%100+1;

    2,注意循环语句中大括号的位置和各个语句的位置;

    3,程序结束时大括号填齐;

    4,注意每条语句后是否需要加分号;

    5,注意每个赋值式子的位置。



  • 相关阅读:
    迭代器和生成器
    案例:复制大文件
    案例:使用seek倒查获取日志文件的最后一行
    Leetcode165. Compare Version Numbers比较版本号
    Leetcode137. Single Number II只出现一次的数字2
    Leetcode129. Sum Root to Leaf Numbers求根到叶子节点数字之和
    Leetcode116. Populating Next Right Pointers in Each Node填充同一层的兄弟节点
    Leetcode114. Flatten Binary Tree to Linked List二叉树展开为链表
    Leetcode113. Path Sum II路径总和2
    C++stl中vector的几种常用构造方法
  • 原文地址:https://www.cnblogs.com/zhao-1184346113/p/6046513.html
Copyright © 2020-2023  润新知