• 面向过程程序设计——循环结构程序设计(2)


    7-1 百鸡问题扩展-N鸡问题

    N元钱买N只鸡,公鸡每只5元,母鸡每只3元,小鸡1元3只,N元钱必须刚好买N只鸡,而且鸡必须整只买,不能劈开买。

    有几种买法呢?这就是N鸡问题。

    输入格式:

    在一行中输入一个正整数N。(N<500

    输出格式:

    在一行中输出两个整数c s,中间用一个空格隔开,表示N元钱买N只鸡共有 c 种买法,且所有买法的公鸡数量之和是 s

    如果无解,则 s 为 -1.

    输入样例1:

    100
    

    输出样例1:

    4 24
    

    输入样例2:

    1
    

    输出样例2:

    0 -1
    1. #include<stdio.h>
    2. int main()
    3. {
    4. int N,c=0,s=0;
    5. int gong,mu,xiao;
    6. scanf("%d",&N);
    7. for(gong=0;gong<=N;gong++)
    8. {
    9. for(mu=0;mu<=N-gong;mu++)
    10. {
    11. for(xiao=0;xiao<=N-gong-mu;xiao++)
    12. {
    13. if(gong+mu+xiao==N&&gong*5+mu*3+xiao/3==N&&xiao%3==0)
    14. {
    15. c++;
    16. s+=gong;
    17. }
    18. }
    19. }
    20. }
    21. if(c==0){
    22. printf("0 -1");
    23. }
    24. else
    25. printf("%d %d",c,s);
    26. return 0;
    27. }

    7-2 编程打印空心字符菱形

    本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。

    输入格式:

    输入在一行中给出起始字母(范围为英文大写字母A-G)和菱形的高度(为不超过10的奇数)。

    输出格式:

    输出空心字符菱形。

    输入样例:

    1. B 5

    输出样例:

    1. B
    2. C C
    3. D D
    4. C C
    5. B
    1. #include <stdio.h>
    2. // 1、先画出实心菱形(把菱形分成上下俩部分,再分成正三角和倒三角 )
    3. // 2、 把输入的N(n层)带入循环
    4. // 3、 用if语句使菱形中心为空
    5. // 4、 利用ASCII码的加减 实现字母组成
    6. int main()
    7. {
    8. int n,i,j;
    9. char c;
    10. scanf("%c%d",&c,&n);
    11. //针对奇数层的菱形 上部分
    12. for(i=1;i<=n/2+1;i++)
    13. {
    14. //第一个为上班边的倒三角
    15. for(j=n/2;j>=i;j--)
    16. printf(" ");
    17. //第二个上半边的正三角
    18. for(j=0;j<i*2-1;j++)
    19. {
    20. //菱形中间的空心用if else来实现
    21. if(j==0 || j==i*2-2)
    22. printf("%c",c);
    23. else
    24. printf(" ");
    25. }
    26. c+=1;
    27. printf("\n");
    28. }
    29. c-=1;
    30. //下部分
    31. for(i=1;i<=n/2;i++)
    32. {
    33. c-=1;
    34. //第三个为下半边的正三角
    35. for(j=1;j<=i;j++)
    36. printf(" ");
    37. //第四个三角形为倒三角形
    38. for(j=n-2;j>=i*2-1;j--)
    39. {
    40. if(j==n-2 || j==i*2-1)
    41. printf("%c",c);
    42. else
    43. printf(" ");
    44. }
    45. printf("\n");
    46. }
    47. }

    7-3 N个数求和

    本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

    输入格式:

    输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

    输出格式:

    输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

    输入样例1:

    1. 5
    2. 2/5 4/15 1/30 -2/60 8/3

    输出样例1:

    3 1/3
    

    输入样例2:

    1. 2
    2. 4/3 2/3

    输出样例2:

    2
    

    输入样例3:

    1. 3
    2. 1/3 -1/6 1/8

    输出样例3:

    7/24

     

    1. #include<stdio.h>
    2. #include<stdlib.h>
    3. int gcd(int x,int y)
    4. {
    5. return y?gcd(y,x%y):x;
    6. }
    7. int main()
    8. {
    9. int n,a1,b1,a2,b2,t,p;
    10. scanf("%d",&n);
    11. scanf("%d/%d",&a1,&b1);
    12. n--;
    13. while(n--)
    14. {
    15. scanf("%d/%d",&a2,&b2);
    16. a1=a1*b2+a2*b1;b1*=b2; //进行通分
    17. if(a1<0) //p代表正负
    18. a1*=-1,p=-1;
    19. else if(a1==0) //分子为0的情况
    20. {
    21. b1=1;continue;
    22. }
    23. else p=1;
    24. t=gcd(a1,b1);
    25. a1=a1*p/t;b1/=t;
    26. }
    27. if(abs(a1)%b1==0) printf("%d\n",a1/b1); //分类讨论输出
    28. else if(abs(a1)/b1>=1) printf("%d %d/%d\n",a1/b1,abs(a1)-abs(a1/b1)*b1,b1);
    29. else printf("%d/%d\n",a1,b1);
    30. }

     

    7-4 水仙花数

    水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。

    输入格式:

    输入在一行中给出一个正整数N(3≤N≤7)。

    输出格式:

    按递增顺序输出所有N位水仙花数,每个数字占一行。

    输入样例:

    3
    

    输出样例:

    1. 153
    2. 370
    3. 371
    4. 407

     

    1. #include <stdio.h>
    2. int pow(int a,int b){
    3. int i,t=a;
    4. for(i=1;i<b;i++){
    5. a=a*t;
    6. }
    7. return a;
    8. }
    9. int main (){
    10. int i,n,N;
    11. int sum,num;
    12. scanf("%d",&N);
    13. n=pow(10,N);
    14. for(i=pow(10,N-1);i<n;i++){
    15. num=i;
    16. sum=0;
    17. while(num>0){
    18. sum=sum+pow(num%10,N);
    19. num=num/10;
    20. }
    21. if(sum==i){
    22. printf("%d\n",i);
    23. }
    24. }
    25. return 0;
    26. }

    7-5 小于m的最大的10个素数 

    给定一个整数m(50

    输入格式:

    输入在一行中给出一个正整数m(50

    输出格式:

    在一行中按递减顺序输出10个满足条件的素数,每个素数输出占6列。没有其它任何附加格式和字符。

    输入样例:

    229
    

    输出样例:

       227   223   211   199   197   193   191   181   179   173

     

    1. #include<stdio.h>
    2. int judge(int n)
    3. {
    4. int i;
    5. for (i = 2; i < n; i++)
    6. if (n%i == 0)break;
    7. if (i == n) return 1;
    8. else return 0;
    9. }
    10. int main()
    11. {
    12. int m, i, count = 0;
    13. scanf("%d", &m);
    14. for ( i = m-1; i > 1; i--){
    15. if(judge(i)){
    16. printf("%6d", i);
    17. count++;
    18. }
    19. if (count == 10)break;
    20. }
    21. }

    7-6 1000以内所有各位数字之和为n的正整数

    输出1000以内所有各位数字之和为n的正整数,例如:如果输入的n是6,那么,105的各位数字之和1+0+5=6, 123的各位数字之和1+2+3=6,两者都满足要求。每行输出6列,每个整数占8位宽度右对齐。

    输入格式:

    从键盘输入整数n的值。

    输出格式:

    每行输出6列,每个整数占8位宽度右对齐。如果最后一行不足6列,也需要换行。

    输入样例:

    在这里给出一组输入。例如:

    6
    

    输出样例:

    在这里给出相应的输出。例如:

    1. 6 15 24 33 42 51
    2. 60 105 114 123 132 141
    3. 150 204 213 222 231 240
    4. 303 312 321 330 402 411
    5. 420 501 510 600

     

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int n=0;
    5. scanf("%d",&n);
    6. int m=0;
    7. for(int i=0;i<=1000;i++)
    8. {
    9. int ret=0;
    10. int num=i;
    11. while(num>0)
    12. {
    13. ret+=num%10;
    14. num/=10;
    15. }
    16. if(ret==n)
    17. {
    18. printf("%8d",i);
    19. m++;
    20. if(m%6==0)
    21. printf("\n");
    22. }
    23. }
    24. // printf("\n");
    25. return 0;
    26. }

  • 相关阅读:
    搞透 IOC,Spring IOC 看这篇就够了!
    聚类算法概念复习
    哈工大李治军老师操作系统笔记【13】:一个实际的schedule函数(Learning OS Concepts By Coding Them !)
    RK3568驱动指南|第五期-中断-第44章 共享工作队列实验
    1、为什么要研究机器人
    详解IIC通信协议以及FPGA实现
    Redis分布式锁及缓存的简单实现
    Java中Long型数据类型对应MySQL数据库中哪种类型?
    【神策数据面试】手撕题
    【精品】pinia详解
  • 原文地址:https://blog.csdn.net/LxinY213/article/details/127818429