用c语言在屏幕上输出菱形
这道题目乍一看很简单,但是实际上不简单。
首先要明确这个菱形只有奇数行才能打印出来,因此防止在输入时输入偶数,我们把它分成上下两部分,假设中间行包括在上半部分,那么加入上半部分输入5则下半部分为4,若上半部分输入6,则下半部分为5,保证了总数为奇数行。
然后在打印时,要找出每一行的空格和*与行数之间的关系,找到这个关系就可以进行打印了。
int main()
{
int line = 0;//上半部分的行数,则下半部分为 line-1 行
scanf("%d", &line);
//打印上半部分
int i = 0;
for (i = 0; i < line; i++)
{
//打印空格
int j = 0;
for (j = 0; j < line-1-i ;j++)
{
printf(" ");
}
//打印*
for (j = 0; j < 2*i+1; j++)
{
printf("*");
}
printf("\n");
}
//打印下半部分
for (i = 0; i < line - 1; i++)
{
//打印空格
int j = 0;
for (j = 0; j <= i; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < 2*(line - 1 - i) - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
喝汽水问题
1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水。
这道题乍一看很难,但其实不难。同样也是一个找规律的问题。
假设有20块钱的话,那么会产生以下的关系:
定义一个变量money,一个总数量total,以及空瓶数empty
首先,考虑直接用钱能买回来的汽水,那么total = money;
然后,在考虑换回来的汽水,是直接买来的数量赋给empty = money;
只要空瓶的数量>=2就可以继续换,因此使用while循环,将空瓶的数量除以2就是空瓶换回来的汽水数量加到total上。然后还会继续产生空瓶,再考虑到奇数平会余下一瓶的情况,因此加上empty % 2。
int main()
{
int money = 0;
int total = 0;
int empty = 0;
scanf("%d", &money);
//买回来的汽水
total = money;
empty = money;
//换回来的汽水
while (empty >= 2)
{
total += empty / 2;
empty = empty / 2 + empty % 2;
}
printf("total = %d\n", total);
return 0;
}