c_20200504

  • 求任意两个数的最大公约数

    • 两个数的最大公约数有可能是其中较小的数字,在寻找最大公约数时按从大到小的顺序进行排序,循环变量i的初值从较小的数字开始,依次递减,去寻找第一个能同时整除两个整数的自然数,并将其输出。
    • 注意:虽然判定条件是i>0,但在找到第一个满足条件的i的值后,即可跳出循环,例如输入25和15,最大公约数是5,对于后面的4、3、2、1没有必要继续执行,但此时判定条件仍然成立,要结束循环只能借助break语句。
    #include <stdio.h>
    int main() {
        int a, b, t, i;
        printf("enter 2 numbers:\n");
        scanf("%d%d", &a, &b);
        if (a < b) {	//比较大小,a存储大值,b存储小值
            t = a;
            a = b;
            b = t;
        }
        for (i = b; i > 0; i--) {	//i的初值从较小的数字开始,依次递减,去寻找第一个能同时整除两个整数的自然数,并将其输出
            if (a % i == 0 && b % i == 0){
                printf("The GDC of %d and %d is %d\n", a, b, i);
                break;	//结束循环
            }    
        }
        return 0;
    }
  • 求任意两个数的最小公倍数

    • 输入的两个数字,大数a是小数b的倍数,a即为所求最小公倍数,若a不能被b整除,则需要寻找一个能同时被两个整数整除的自然数,在寻找最小公倍数时按从大到小的顺序进行排序,循环变量i的初值从较大的数字a开始向后递增,直到找到第一个能同时被两个整数整除的数字,并将其输出。

    • 注意:由于i的最大值不能确定而导致终止条件不确定,故有如下解决办法:

      1. 将判定条件表示成循环变量满足的基本条件,如终止条件可以设置为i > 0;
      2. 终止条件省略不写,利用循环体中的语句结束循环,如在找到第一个满足条件的自然数时利用break语句跳出循环。
      #include <stdio.h>
      int main() {
          int a, b, t, i;
          printf("enter 2 numbers:\n");
          scanf("%d%d", &a, &b);
          if (a < b) {	//比较大小,a存储大值,b存储小值
              t = a;
              a = b;
              b = t;
          }
          for (i = a; i > 0; i++) {	//i的初值从较大的数字a开始向后递增,直到找到第一个能同时被两个整数整除的数字,并将其输出,此处循环终止条件可不写for (i = a; ; i++)
              if (i % a == 0 && i % b == 0) {
                  printf("The LCW of %d and %d is %d\n", a, b, i);
                  break;
              }
          }
          return 0;
      }
  • 求两个数m和n的最大公约数

    • 利用格式输入语句将输入的两个数分别赋给 a 和 b,然后判断 a 和 b 的关系,如果 a 小于 b,则利用中间变量 t 将其互换。再利用辗转相除法求出最大公约数,进而求出最小公倍数。最后用格式输出语句将其输出。

    • 辗转相除法:

      • 有两个整数a和b:
        1. a%b得余数c;
        2. 若c = 0,则b为两数得最大公约数;
        3. 若c ≠ 0,则a = b, b = c,再执行1;
      • 最小公倍数 = 两数的乘积 / 最大公约数
    #include <stdio.h>
    int main() {
        int a, b, c, m, t;
        printf("enter 2 numbers:\n");
        scanf("%d%d", &a, &b);
        if (a < b) {
            t = a; 
            a = b;
            b = t;
        }
        m = a * b;
        c = a % b;
        while (c != 0) {
            a = b;
            b = c;
            c = m % b;
        }
        printf("The GDC of %d and %d is %d\n", a, b, b);
        printf("The LCW of %d and %d is %d\n", a, b, m/b);
        return 0;
    }
  • 猴子吃桃问题

    • 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。编写程序求猴子第一天摘了多少个桃子。
    #include <stdio.h>
    int main() {
        int day, x1, x2;
        day = 9;
        x2 = 1;
        while(day > 0) {
            x1 = (x2 + 1) * 2;
            x2 = x1;
            day--;
        }
        printf("total is %d\n", x1);
        return 0;
    }
  • 输入10个数字,输出其中最大的一个数字:

    #include <stdio.h>
    int main() {
        int i, max;
        int a[10];
        printf("enter 10 numbers:\n");
        for (i = 0; i < 10; i++)
        	scanf("%d", &a[i]);
        max = a[0];
        for (i = 1; i < 10; i++) {
            if (max < a[i])
                max = a[i];
        }
        printf("max = %d\n", max);
        return 0;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值