一、韩信点兵问题
相传韩信才智过人,从不清点自己军队人数,只要让士兵先后以三人一排,五人一排,七人一排地变换队形,而它每次只掠一眼队尾就知道总人数了,请输入3个非负数a,b,c,表示每种队形队尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解),已知总人数不小于10,不大于100.
运行效果:
假设输入
a=2
,b=3
,c=2
,则程序输出23
,因为:
- 23 % 3 = 2
- 23 % 5 = 3
- 23 % 7 = 2
代码展示:
#include <stdio.h>
int main() {
int a, b, c;
int x; // x是总人数,范围从10到100
printf("请输入3个非负整数(表示模3, 模5, 模7的余数):");
scanf("%d %d %d", &a, &b, &c);
int found = 0;
for ( x = 10; x <= 100; x++)
{
if (x % 3 == a && x % 5 == b && x % 7 == c)
{
printf("总人数的最小值为: %d\n", x);
found = 1;
break;
}
}
if (!found) {
printf("无解。\n");
}
return 0;
}
二、求0~n中出现2的次数
请编写一个程序,求0~n中2出现的次数。
运行效果:
测试用例:
10 返回1 12 返回2
20 返回3 21 返回4
22 返回6 23 返回7
代码展示:
#include<stdio.h>
int main()
{
int n,i;
int count = 0;
printf("请输入一个数字n:");
scanf("%d", &n);
// 遍历从0到n的所有数字
for (i = 0; i <= n; i++)
{
int number = i;
// 对数字,逐位检查
while (number > 0)
{
if (number % 10 == 2)
{
count++;
}
number /= 10;
}
}
printf("从0到%d数字2出现的次数为:%d\n", n, count);
return 0;
}
三、数字组合
有1、2、3、4个数字,能组成多少个互不相同且无重复的三位数?都是什么?
运行效果:
代码展示:
#include <stdio.h>
int main()
{
int i,j,k;
int count = 0;
// 使用三重循环来生成所有可能的三位数
for ( i = 1; i < 5; i++)
{
for ( j = 1; j < 5; j++)
{
for ( k = 1; k < 5; k++)
{
if (i != j && k != i && k != j)
{
printf("%d%d%d\t", i, j, k);
count++;
// 如果已经输出了五个三位数,就换行
if (count % 5 == 0)
{
printf("\n");
}
}
}
}
}
printf("\n总共有 %d 个不同的三位数\n", count);
return 0;
}
四、斐波那契额数列
打印斐波那契额数列第n项的数字
斐波那契额数列数字:1 1 2 3 5 8 12 21 34......规律:
F(1) = 1
F(2) = 1
F(n) = F(n-1) + F(n-2)
,n > 2
运行效果:
代码展示:
#include <stdio.h>
int main()
{
int n,i;
printf("请输入要打印的斐波那契数列的第n项:");
scanf("%d", &n);
if (n <= 0) {
printf("请输入一个大于0的正整数。\n");
return 1;
}
int first = 1, second = 1, next = 1;
if (n == 1 || n == 2)
{
next = 1;
}
else
{
for ( i = 3; i <= n; i++)
{
next = first + second; // n项
first = second; // n-2项
second = next; // n-1项
}
}
printf("第%d项是: %d\n", n, next);
return 0;
}
五、素数
打印出2~1000内所有的素数,并打印个数;
素数就是除了1和它本身再没有其他因数了。
运行效果:
代码展示:
#include <stdio.h>
int main(void)
{
int count=0;
int i,j;
//遍历2到1000
for ( i = 2; i <= 1000 ; i++)
{
//除以2到它本身的数,如果之间有可以整除的数,则不为素数,结束循环
for ( j = 2; j < i ; j++)
{
if (i%j==0)
{
break;
}
}
//打印素数并计数
if (i==j)
{
count++;
printf("%d\t",i);
// 如果已经输出了五个三位数,就换行
if (count % 8 == 0)
{
printf("\n");
}
}
}
//打印个数
printf("\n共有%d个\n",count);
return 0;
}
制作不易,请抬抬珍贵的小手,点赞+收藏+关注,谢谢!!!