分享的是一些比较基础的题,比较适合初学者练习,水平高看不上的勿喷谢谢,有不同解法可以多多交流。
1.打印星星塔
输出以下形式的星星塔
进行简单的分析:用 i 代表第几行,用 j 代表该行输出" * "之前输出的空格数,用 k 代表该行的" * "的数量,那么可以得到以下数量关系:
由此可见 i j k之间的关系满足:j = 5 - i k = 2 * i - 1 代码如下:
#include <stdio.h>
int main()
{
for (int i = 1; i <= 5; i++)
{
for (int j = 1; j <= 5-i; j++)
{
printf(" ");
}
for (int k = 1; k <= 2 * i - 1; k++)
{
printf("*");
}
printf("\n");
}
return 0;
}
2.打印九九乘法表
通过观察发现,每一行都是从1开始乘,乘的数就是该行对应的数,乘到该行对应的数。以第三行为例,从1开始乘,到3结束,同时每个数都是乘3,1*3 2*3 3*3,第一个数从1开始,用 i 表示第几行,同时 i 也是该行代表的数,用 j 进行循环,i 和 j 的关系就是 j <= i,代码如下:
#include <stdio.h>
int main()
{
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
printf("%d * %d = %d\t", j, i, j * i);
}
printf("\n");
}
return 0;
}
注:使用" \t "的目的是为了方便输出的时候比较整齐
3.年龄的二倍
题目:今年爸爸的年龄是36岁,儿子的年龄是13岁,问:经过多少年父亲的年龄是儿子的二倍。
用 f 代表父亲的年龄,s 代表儿子的年龄,y 代表需要经过多少年,那么只需要在循环里使 f 和 s 递增直至满足 f = 2*s 的表达式即可,代码如下:
#include <stdio.h>
int main()
{
int f = 36;
int s = 13;
int y = 0;
while (f > 0)//随便写一个条件能使循环一直进行就行
{
if (f == 2 * s)
{
printf("%d\n", y);
break;
}
f++;
s++;
y++;
}
return 0;
}
4.水仙花数
水仙花数:一个各位数字的立方和等于该数本身的三位数
题目的重点就是把各位数字表示出来,若用 i 表示任意一个三位数,那么百位数字可以用 i / 100 表示,十位数字可以用 i % 100 / 10 表示,个位数字可以用 i % 100 % 10 表示,代码如下:
#include <stdio.h>
int main()
{
for (int i = 100; i <= 999; i++)
{
int a = i / 100; //百位数字
int b = i % 100 / 10; //十位数字
int c = i % 100 % 10; //个位数字
if (a * a * a + b * b * b + c * c * c == i)
{
printf("%d\n", i);
}
}
return 0;
}
5.猴子吃桃
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下个桃子了。求第一天共摘了多少。
题目可以从最后一天入手,反推到第一天,根据已知条件利用循环将第一天的摘的桃子数求出,代码如下:
#include <stdio.h>
int main()
{
int tao = 1;
for (int i = 1; i <= 9; i++)
{
tao = (tao + 1) * 2;
}
printf("%d\n", tao);
return 0;
}