练习日志 ,02/20
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int money = 5;//钱
int total = money;//总瓶数
int empty = money;//空瓶数
scanf("%d", &money);
while (empty > 1)
{
total = total + empty / 2;
empty = empty / 2 + empty % 2;
}
printf("%d", total);
return 0;
}
逐行解释
1.用钱去买可乐,就会有5瓶,并且产生5个空瓶
2.while循环是因为当空瓶数还剩下一个时就停止循环。此时不足以换一瓶可乐
3. empty / 2,意思是第一次买了5瓶,然后用两个空瓶换一瓶,兑换的瓶数再和总数相加,以此类推
4.empty / 2 ,兑换完并且喝完,产生了空瓶数。empty % 2,假设就是5个空瓶,余下1个不够兑换的空瓶,加上前的empty / 2 = 2 + 1 ,产生三个空瓶。
往后以次类推,然后在回到解释 2,直到结束
方法2:其实可以发现就是一个等差数列
int money = 5;//钱
int total = 0;//总瓶数
scanf("%d", &money);
if (money <= 0)
printf("0");
else
total = (money * 2) - 1;
printf("%d", total);
练习二:
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,
例如:2+22+222+2222+22222
int a = 0;//需要计算的值
int n = 0;//几次累加
int sum = 0;
int temp = 0;
scanf("%d %d", &a, &n);
for (int i = 0; i < n; i++)
{
temp = temp * 10 + a;//temp 第一次加3,第二次3*10+a第三次33*10 +3; //把每次计算的值放到temp,然后在累加
sum += temp;
}
printf("%d", sum);
思路就是把通过全部相加给到临时变量然后累加