1. 每日一言
Intelligence without ambition is a bird without wings.
聪明但没有抱负,就像没有翅膀的鸟。
2. 题目(11)打印菱形
输入一个整数n,打印对应2n-1行的菱形图案,比如输入7,图案一共13行
1 *
2 ***
3 *****
4 *******
5 *********
6 ***********
7 *************
8 ***********
9 *********
10 *******
11 *****
12 ***
13 *
3. 思路
-
将图案分为上下两部分(前7行和后6行)
-
仔细观察这个图形,发现上半部分一共n行,第 i 行需要打印2*i -1个*号
-
上半部分:需要打印n行
-
为了实现居中对齐,我们可以在每一行的前面打印n-i-1个空格。
-
接着打印i+1个*号
-
最后别忘记换行
-
下半部分:需要打印n-1行
-
为了实现居中对齐打印i+1个空格
-
接着打印n-i-1个*号
10.别忘记换行
4. 代码
#include <stdio.h>
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
//将菱形分成两部分 上部是n+1行打印 下部是n行打印
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i-1; j++)
{
printf(" ");
}
for (int j = 0; j <= i; j++)
{
printf("* ");
}
printf("\n");
}
for (int i = 0; i < n-1; i++)
{
for (int j = 0; j <= i; j++)
{
printf(" ");
}
for (int j = 0; j < n - i-1; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
5. 题目(12)喝汽水
已知1瓶汽水1元,2个空瓶可以换一瓶汽水,输入整数n(n>=0),表示n元,计算一共可以得到多少瓶汽水?
6. 解题思路一
因为一瓶汽水一元,所以我们可以把n看做有几瓶汽水。
假设我有5元,也就是5瓶汽水,此时空瓶也是5
题目说两个空瓶可以换一瓶
把每个红色部分看成一瓶,还剩3个空瓶
同理,把每两瓶看做一瓶
把每个红色部分看成一瓶,还剩2个空瓶
把每个红色部分看成一瓶,还剩1个空瓶
接下来数一数一共喝了多少瓶
注意:红圈里的是用空瓶子新换的
一共有5+2+1+1=9瓶
7. 代码
int main() {
int sum = 0;//汽水
scanf("%d", &sum);
int kong = sum;//空瓶数
while (kong>=2) {//空瓶多余2个就兑换
sum += kong/2;//新换的饮料
kong = kong / 2 + kong % 2;//兑换后的空瓶数
}
printf("%d", sum);
return 0;
}
8. 解题思路二
这道题有没有什么规律呢?
当n=1时,sum=1
当n=2时,sum=3
当n=3时,sum=5
当n=4时,sum=7
当n=5时,sum=9
通过以上列举出来的式子,不难总结出 sum = 2*n - 1
以上只是我们通过不完全归纳法证出来的,仔细思考一下到底对不对?
我们可以这样想:2个空瓶可以换1瓶饮料和1个空瓶,相当于一个空瓶换一瓶汽水,不管你开始有几瓶,最后一定只剩一个空瓶,所以sum = 2*n - 1
难道sum的表达式真的是这样吗?
哈哈~别忘了,当n=0时,sum肯定不是负数
9. 代码
int main()
{
int n = 0;//汽水
scanf("%d", &n);
if (n > 0)
printf("%d", n * 2 - 1);
else
printf("0");
return 0;
}