• 湘潭大学 2023年下学期《C语言》作业0x04-循环2 XTU OJ 1182,1149,1213,1277,1343


    第一题

    1. #include
    2. int main()
    3. {
    4. int t;
    5. scanf("%d",&t);
    6. while(t--)
    7. {
    8. double month[20];
    9. for(int i=0;i<12;i++) scanf("%lf",&month[i]);
    10. double ans=1;
    11. for(int i=0;i<12;i++) ans=(month[i]/100+1)*ans;
    12. ans*=100;
    13. ans-=100;
    14. printf("%.3lf\n",ans);
    15. }
    16. return 0;
    17. }

    注意题目输入的是带百分号的数字,输入1表示的是0.01,另外输出的答案也是输出带百分号的答案,注意还要减去原来的大小才是计算的利率,合理使用双精度变量非常方便

    第二题

    1. #include
    2. #include
    3. #define N 100010
    4. bool state[N];
    5. int main()
    6. {
    7. int a,c,m;
    8. while(~scanf("%d%d%d",&a,&c,&m))
    9. {
    10. for(int i=0;ifalse;
    11. int temp=c%m;
    12. bool flag=false;
    13. while(state[temp]!=true)
    14. {
    15. state[temp]=true;
    16. temp=(a*temp+c)%m;
    17. }
    18. for(int i=0;i
    19. {
    20. if(state[i]==false)
    21. {
    22. flag=true;
    23. break;
    24. }
    25. }
    26. if(flag==true) printf("No\n");
    27. else printf("Yes\n");
    28. }
    29. return 0;
    30. }

    注意标记状态,把0~m-1这些数字初始状态都标记为false,然后使用循环,如果可以生成某数字,就把该数字的状态标记为true,之后遍历0~m-1数字的状态,如果存在数字的状态仍然是false,说明该数字不能使用所给方程生成出来,输出No,反之输出Yes 

    第三题

    1. #include
    2. int gcd(int a,int b)
    3. {
    4. return b>0?gcd(b,a%b):a;
    5. }
    6. int main()
    7. {
    8. int t;
    9. scanf("%d",&t);
    10. while(t--)
    11. {
    12. int n,m;
    13. scanf("%d%d",&n,&m);
    14. int total_down=n*(n-1)*(n-2)/6;
    15. int total_up=m*(m-1)*(m-2)/6;
    16. int u=gcd(total_down,total_up);
    17. total_down/=u;
    18. total_up/=u;
    19. if(n==m) printf("1\n");
    20. else if(m<3) printf("0\n");
    21. else printf("%d/%d\n",total_up,total_down);
    22. }
    23. return 0;
    24. }

    题目有点绕,主要考查的是最大公约数模板:最大公约数模板 

    有一些简单的排列组合的知识,从n个元素里面选择3个,有多少种情况(total_down),从m个元素里面选择3个,有多少种情况(total_up),然后分情况讨论一下

    第四题

    1. #include
    2. int main()
    3. {
    4. char c[2];
    5. while(~scanf("%s",c))
    6. {
    7. int length=c[0]-'A';
    8. for(int i=0;i<=length;i++)
    9. {
    10. int j,k,m;
    11. for(j=0;j<=length*2-i;j++) printf(" ");
    12. for(k=0;k<=i;k++) printf("%c",'A'+k);
    13. for(m=k-2;m>=0;m--) printf("%c",'A'+m);
    14. printf("\n");
    15. }
    16. for(int i=0;i<=length;i++)
    17. {
    18. int l,h,g;
    19. for(l=0;l<=length-i-1;l++) printf(" ");
    20. for(h=0;h<=i;h++) printf("%c",'A'+h);
    21. for(g=h-2;g>=0;g--) printf("%c",'A'+g);
    22. int q,w,e;
    23. for(q=0;q<=length*2-i*2;q++) printf(" ");
    24. for(w=0;w<=i;w++) printf("%c",'A'+w);
    25. for(e=w-2;e>=0;e--) printf("%c",'A'+e);
    26. printf("\n");
    27. }
    28. }
    29. return 0;
    30. }

    是一个恐怖的模拟题目,我们输入的时候有换行,所以使用字符数组,字符串输入可以避免这个问题,数组的第一个元素就是我们输入的字符

    可以分两个循环来实现,第一个循环是上面的三角形,第二个循环是下面的两个三角形,第二个循环里面先打印左边三角形,再打印右边三角形

    循环变量的终点需要取什么数值,需要我们根据样例找规律找出来,建立各个循环变量之间的关系即可,可以一边写代码,一边测试打印结果是否符合预期效果

    第五题

    1. #include
    2. int gcd(int a,int b)
    3. {
    4. return b>0?gcd(b,a%b):a;
    5. }
    6. int main()
    7. {
    8. int t;
    9. scanf("%d",&t);
    10. while(t--)
    11. {
    12. int n,k;
    13. scanf("%d%d",&n,&k);
    14. if(gcd(n,k+1)==1) printf("Yes\n");
    15. else printf("No\n");
    16. }
    17. return 0;
    18. }

    注意k是中间间隔的青蛙数目,不是两只青蛙之间的距离,比如说第一个样例,从1到3,中间间隔的不是2那只青蛙,间隔的是4,5两只青蛙,所以从1到3其实是只可以逆时针走的(刚开始看到题目我还以为是题目描述出错了) 

    经过分析我们发现,k+1表示的是每一次青蛙可以跳的单位数,涉及到一些数论知识,笔者也没有完全弄懂,(k+1)x=c%n,(k+1)x=ny+c, (k+1)x-ny=c,根据裴蜀定理,可以知道需要k+1和n互质

  • 相关阅读:
    量子多体理论怎么样理解,多体系统的量子理论
    论如何优雅的注入Java Agent内存马
    吃透SpringBoo的这些t知识,你就已经超过90%的Java面试者了
    深入理解MySQL——配置半同步复制
    光伏三相并网逆变器的控制策略与性能分析(Simulink仿真实现)
    Baklib协作文档平台|企业如何进行文档协同?
    【无标题】
    【前端】HTML标签(下)
    《算法工程师带你去》读书笔记
    Spring MVC文件请求处理详解:MultipartResolver
  • 原文地址:https://blog.csdn.net/L3102250566/article/details/133699430