拓展:带空格直角三角形图案
题目要求
示例展示
这里博主就不做过多讲解了,这种找规律的题,还需要宝子们多勤加练习,这里给出两个解题代码
代码一
1. int main() 2. { 3. int n = 0; 4. while(scanf("%d", &n) != EOF) 5. { 6. int i = 0; 7. //行数控制 8. for(i=0; i<n; i++) 9. { 10. //空格 11. int j = 0; 12. for(j=0; j<n-1-i; j++) 13. { 14. printf(" "); 15. } 16. //* 17. for(j=0; j<=i; j++) 18. { 19. printf("* "); 20. } 21. printf("\n"); 22. } 23. 24. } 25. return 0; 26. }
代码二
1. int main() 2. { 3. int n = 0; 4. while(scanf("%d", &n) != EOF) 5. { 6. int i = 0; 7. int j = 0; 8. //行数 9. for(i=0; i<n; i++) 10. { 11. //一行 12. for(j=0; j<n; j++) 13. { 14. //行和列的和 15. //这里可以把行数和列数标出来就能看明白 16. if(i+j<n-1) 17. { 18. printf(" "); 19. } 20. else 21. { 22. printf("* "); 23. } 24. } 25. printf("\n"); 26. } 27. } 28. return 0; 29. }
水仙花数
题目要求
求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”
解题思路
我们将此题进行拓展一下,我们想加入我们想要求100以内的呢?或者更大呢?
所以我们改为我们只需要输入我们想要的n,便就可以输出你想要的0~n之间的水仙花数
1. int n = 0; 2. scanf("%d", &n);
首先水仙花数要用自身的位数为次方,所以我们需要求出它的位数,实现如下
1. int panduan(int n) 2. { 3. if (n / 10 != 0) 4. return 1 + panduan(n / 10); 5. else return 1;//整数最少也为一位 6. }
其次我们需要剥离每一位并进行求和,代码如下
1. int jisuan(int a, int b) 2. { 3. if (a / 10 != 0) 4. { 5. return pow(a % 10, b) + jisuan(a / 10,b); 6. } 7. else return pow(a % 10, b); 8. }
最后 我们就只要再进行遍历每一个数并判断就好,代码如下
1. int main() 2. { 3. int n = 0; 4. scanf("%d", &n); 5. int i = 0; 6. for (i = 0; i < n; i++) 7. { 8. int w = panduan(i); 9. int sn = jisuan(i, w); 10. if (sn == i) 11. printf("%d ", i); 12. 13. } 14. return 0; 15. }
拓展:变种水仙花数
题目要求
这里博主就不做过多解释了,如果看代码有不懂的宝子可以私信博主,或者评论留言,代码如下
1. #include <stdio.h> 2. #include<math.h> 3. int main() { 4. int i = 0; 5. int n = 0; 6. int s = 0; 7. for (i =10000; i <= 99999; i++) 8. { 9. int b = 0; 10. int a = 1; 11. while (a != 0) 12. { 13. a = i / pow(10, b); 14. b++; 15. } 16. s = 0; 17. for (n = 1; n<b - 1; n++) 18. { 19. int d = pow(10, n); 20. s =s+i/d * (i % d); 21. } 22. if(s==i) 23. printf("%d ", i); 24. } 25. return 0; 26. }
买汽水
题目要求:
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。
思路
1. 20元首先可以喝20瓶,此时手中有20个空瓶子
2. 两个空瓶子可以喝一瓶,喝完之后,空瓶子剩余:汽水数/2(两个空瓶子换的喝完后产生的瓶子) + 汽水数%2(不够换的瓶子)
3. 如果瓶子个数超过1个,可以继续换,即重复2
先来看看博主写的代码:
1. #include<stdio.h> 2. 3. int maiqishui(int n) 4. { 5. int count = n; 6. while (n / 2 != 0) 7. { 8. count = count + n / 2; 9. n = n / 2 + n % 2; 10. } 11. return count; 12. } 13. 14. int main() 15. { 16. int n = 0; 17. scanf("%d", &n); 18. int sn = maiqishui(n); 19. printf("%d", sn); 20. return 0; 21. }
博主在这二再提供两种代码,供宝子们理解
代码一
1. int main() 2. { 3. int money = 0; 4. int total = 0; 5. int empty = 0; 6. 7. 8. scanf("%d", &money); 9. 10. //方法1 11. total = money; 12. empty = money; 13. while(empty>1) 14. { 15. total += empty/2; 16. empty = empty/2+empty%2; 17. } 18. 19. 20. return 0; 21. }
代码二
1. // 方法二:按照上述喝水和用瓶子换的规则的话,可以发现,其实就是个等差数列:money*2-1 2. int main() 3. { 4. int money = 0; 5. int total = 0; 6. int empty = 0; 7. 8. 9. scanf("%d", &money); 10. 11. //方法2 12. if(money <= 0) 13. { 14. total = 0; 15. } 16. else 17. { 18. total = money*2-1; 19. } 20. printf("total = %d\n", total); 21. 22. 23. return 0; 24. }
妙用汽水瓶
我们想一个事,加入你有一个汽水瓶,然后你向老板借一个空汽水瓶,然后现在你有两个空汽水瓶,又可以换一瓶汽水,喝完后再换给老板!!!
博主将消失一段时间进行备战期末考试,感谢各位的支持,记得三连哦