c语言之大题练习

一、水仙花数

所谓水仙花数是指一个三位数,其各位数字的立方和等于该数字本身。

比如153是一个水仙花数,因为153=1^3+5^3+3^3

下列为1000以内的水仙花数:

#include<stdio.h>
    int main(void)
    {  
      int a;
      for(int i=100;i<=999;i++){
          int sum =0;
          int temp =i;

          for(int j=0;j<3;j++){
          a=temp%10;
          temp=temp/10;
          sum+=a*a*a;
          }
          if(sum==i){
              printf("%d ",i);
          }
      }
      
       return 0;
    }

二、寻找完数

一个数如果恰好等于它的因子之和,这个数就称为"完数"。

例如,6的因子为1、2、3,而6=1+2+3。

#include<stdio.h>
int main(void)
{
    int sum;
    for (int i = 2; i <= 1000; i++) {
        sum = 0;
        for (int j = 1; j <= i / 2; j++) {
            if (i % j == 0) sum += j;
        }
        if (sum == i) {
            sum = 0;//这里注意需要重新赋值sum
            printf("%d=", i);
            for (int j = 1; j <= i / 2; j++) {
                if (i % j == 0) {
                    sum += j;
                    printf("%d", j);
                    if (sum != i)printf("+");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

三、求最大公约数和最小公倍数

1、辗转相除法

#include<stdio.h>
int main(void)
{
  
    int m, n, max, min;
    scanf("%d%d", &m, &n); 
    if (m < n) {
        int temp;
        temp = m; m = n; n = temp;//若m<n,将二者互换,保证m>n
    }
    if (m % n == 0)max = n;//如果直接能被整除如:8 2,最大公约数为2
    else {
       
        max = m % n;//如果不能被整除但有公约数如:8 6,最大公公约数为8%6=2
        if (n% max != 0) max = n % max;//如果二者没有公约数,剔除掉有公约数6%2==0这类
    }                                  //剩下没有公约数n%max!=0的情况 
    min = m * n / max;
    printf("最大公约数是:%d\n", max);
    printf("最小公倍数是:%d\n", min);

    return 0;
}

2、for循坏找出能同时被整除的最小自然数

#include<stdio.h>
int main(void)
{
        int m, n, max=0, min;
        scanf_s("%d%d", &m, &n);
        if (m < n) {
            int temp;
            temp = m; m = n; n = temp;//若m<n,将二者互换,保证m>n
        } 
        for (int i = 1; i<=n; i++) {
            if (m % i == 0 && n % i == 0) max = i; //判断找出都能被整除的i(最大公约数)
   }
        min = m * n / max;//最小公倍数=m*n/最大公约数
        printf("%d\n", max);
        printf("%d", min);
    return 0;
}

四、字符串中各类字符数的统计

输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。

#include<stdio.h>
int main(void)
{
    char s;
    int a = 0, b = 0, c = 0, d = 0;
 // while(s = getchar() != '\n')  这是一开始写的错误代码
 //在这一行中"s = getchar()”外层没有括号,"!="优先级大于“=”所以先运算" getchar() != '\n'
    while ((s = getchar()) != '\n') //获取字符直到回车
{
        if (s >= 'a' && s <= 'z' || s >= 'A' && s <= 'Z')
        {
            a++;
        }
        else if (s >='0' && s <= '9') {
            b++;
        }
        else if (s == ' ') {
            c++;
        }
        else d++;
    }
    printf("字母:%d\n数字:%d\n空格:%d\n其他字符:%d", a, b, c, d);
    return 0;
}

五、求sn=a+aa+aaa+aaaa+...

键盘输入a,n,求sn=a+aa+aaa+aaaa+...的值。

#include<stdio.h>
    int main(void)
    {  
      int a, n,b=0,sn=0;
    scanf("%d %d", &a, &n);
    for (int i = 1; i <=n; i++) {
        b =10*b+a; //如输入 5 3 sn=5+55+555
        sn += b;
    }
    printf("%d", sn);
   
       return 0;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值