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;
}