循环练习题

1.水仙花数

输出100~999中所有的水仙花数,若位数ABC满足ABC=A^3+B^3+C^3则被称为水仙花数。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,a,b,c;
    for(n=100;n<=999;n++)
        {
            a=n/100;
            b=(n-a*100)/10;
            c=n%10;
            if(n==a*a*a+b*b*b+c*c*c)
            {printf("%d ",n);}
        }
}

if判断句中必须为“==”,否则输出不停止。

2.韩信点兵

在中国数学史上,广泛流传着一个“韩信点兵”的故事:他让士兵以三人一排,五人一排,七人一排的变换位置,而后看队伍最后一排的人数就知道人数。

输入:包含多组数据,每组数据三个非负整数a,b,c(a<3,b<5,c<7),输出总人数的最小解,已知总人数大于10小于100;

样例输入:2 1 6

                  2 1 3

样例输出:41

                 no answer

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,a,b,c,n=-1;
    scanf("%d%d%d",&a,&b,&c);
    for(i=10;i<100;i++)
    {
      if(i%3==a&&i%5==b&&i%7==c)n=i;
    }
      if(n<0)
        printf("No answer");
      else
        printf("%d",n);
    return 0;
}

3,倒三角形

输入正整数n<=20,输出一个n层的倒三角形。

 

分析每行可得7,5,3,1

代码如下

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++){//三角形排数n
        for(j=0;j<i;j++){//空格数
            printf(" ");
        }
        for(j=0;j<2*(n-i)+1;j++)
        {
            printf("#");
        }
        printf("\n");
    }
    return 0;
}

 4,子序列的和

输入两个正整数n<m<10^6,输出1/n^2+1/(n^2+1)+...1/m^2,保留五位小数,结束标记为n=m=0.

样例输入:
2 4
65536 655360
0 0
样例输出:
Case 1: 0.42361
Case 2: 0.00001
(当n特别大时,n*n会溢出,所以只能连除两次)
代码如下
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int count=0;
    while(1)
    {
    int i,n=0;
    int m=0;
    scanf("%d%d",&n,&m);
    if(n==m&&n==0)break;
    count++;
    double sum=0;
    for(i=n;i<=m;i++){
        sum+=1.0/i/i;
    }
    printf("case%d:%.5f\n",count,sum);
    }
    return 0;
}

5,分数化小数( decimal
    输入正整数 a b c ,输出 a / b 的小数形式,精确到小数点后 c 位。 a b ≤10^ 6 c ≤100 。输
入包含多组数据,结束标记为 a b c 0
样例输入:
1 6 4
0 0 0
样例输出: Case 1: 0.1667

 

#include <stdio.h>

int main()
{
    int a, b, c, ct = 1;
    while(3 == scanf("%d%d%d", &a, &b, &c))
    {
        if(0 == a && 0 == b && 0 == c) break;
        int integer = a / b;                        // 获得整数部分
        printf("Case %d: %d.", ct++, integer);
        a %= b;         // 获得余数
        int i = 1;
        // 进行c-1次模数学拟除法求出小数点后c-1位,因为要四舍五入,所以最后一位单独处理
        while(i++ < c)
        {
            a *= 10;
            printf("%d", a / b);
            a %= b;
        }
        a *= 10;
        // 判断最后一位的下一位是否大于5,进行四舍五入
        printf("%d\n", ((a % b) * 10 / b > 5) ? (a / b + 1) : (a / b));
    }
    return 0;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值