今天依旧借助这个工具记录自己学习c语言的过程今日写了四个编程题由于我是初学者写这四个题确实遇到了一些麻烦不过看了老师的几遍讲解后便不那么没有头绪了。这四题分别是1.喝汽水1瓶汽水1元2个空瓶可以换一瓶汽水给20元可以喝多少汽水编程实现。看下面代码的实现int main() { int money 0; int total 0; int empty 0; scanf(%d, money); total money; empty money; while (empty 1) { total empty / 2; empty empty / 2 empty % 2; } if (money 0) { total 0; } else { total money * 2 - 1; } printf(%d\n, total); return 0; } int Total(int money) { int total money; int empty money; while (empty 1) { total empty / 2; empty empty % 2 empty / 2; } return total; }对于这个题目首要目的是搞清喝汽水的问题如果先以5元为例那么看下图1代表饮料0代表空瓶那么5元可喝的饮料就是9瓶要在代码中实现这个问题关键是求出每次空瓶的数量emptyempty%2empty/2将这个公式拿到while循环中进行实现并且totaltotalempty/2当然也要开始定义moneyemptytotal这些变量。第二题是打印菱形代码为void Func(int line) //上半部分 { for (int i 0; i line; i) { for (int j 0; j line - 1 - i; j) { printf( ); } for (int k 0; k 2 * i 1; k) { printf(*); } printf(\n); } //下半部分 for (int i 0; i line - 1; i) { for (int j 0; j i1; j) { printf( ); } for (int k 0; k(line - 1 - i) * 2 - 1; k) { printf(*); } printf(\n); } } int main() { Func(7); return 0; }这个问题有两个关键点一是空格的数量二是星号数量。这个图形我们分上下两部分打印以第7行为临界点上半部分定义ijk分别代表行数空格星号。由上图规律可以看出来for (int j 0; j line - 1 - i; j){printf( );}for (int k 0; k 2 * i 1; k){printf(*);}这就是其规律在代码的实现三层for循环的嵌套下半部分下半部分在代码上和上半部分一样for(int j0;ji1;j){printf( );}for(int k0;k(line-1-i)*2-1;k){printf(*);}总体上来说这个打印图形的题难就难在找规律上规律一但明了就比较容易了。我也是看了好多遍才写出来。第三题求出0100000之间的所有“水仙花数”并输出。“水仙花数”是指一个n位数其各位数字的n次方之和确好等于该数本身如:1531^35^33^3则153是一个“水仙花数”。void Func() { for (int i 0; i 100000; i) { int count 0; int tmp i; while (tmp ! 0) { count; tmp tmp / 10; } tmp i; int sum 0; while (tmp ! 0) { sum pow(tmp % 10, count); tmp tmp / 10; } if (sum i) { printf(%d\n, i); } } } int main() { Func(); return 0; }首先要找出这个数字的位数又要找出这个数字的组成拿出来进行计算代码中引入了一个函数是pow其头文件是math.h用来计算x的y次幂。拿153举例把其拆解为 1 5 3需要让153/10然后153%10这样使用while循环让其进入循环拿count来计算位数第一次while循环结束后这个值变为0了为了后续计算我们使用tmp代替i第一次循环结束后再给其赋值让它保持原状即tmpi然后第二次while循环中sum函数将所有数字加起来tmp/10就是来将数字拆开进入sum里面。最后当sumi的时候打印这个i。此题结束。第四题求Snaaaaaaaaaaaaaaa的前5项之和其中a是一个数字例如222222222222222int Func(int n, int a) { int sum 0; int tmp 0; for (int i 0; i n; i) { tmp tmp * 10 a; sum tmp; } return sum; } int main() { printf(%d\n, Func(5, 2)); return 0; }要想实现这个题目也是找规律2 22 222 2222之间就是222*10222222*102 2222222*102这样就是nn*10a即代码中tmptmp*0a先定义sumtmp然后使用一个for循环定义i并将上述公式放入代码中并且使用sum将数字加起来就可以了。
2026.3.22日编程题学习
今天依旧借助这个工具记录自己学习c语言的过程今日写了四个编程题由于我是初学者写这四个题确实遇到了一些麻烦不过看了老师的几遍讲解后便不那么没有头绪了。这四题分别是1.喝汽水1瓶汽水1元2个空瓶可以换一瓶汽水给20元可以喝多少汽水编程实现。看下面代码的实现int main() { int money 0; int total 0; int empty 0; scanf(%d, money); total money; empty money; while (empty 1) { total empty / 2; empty empty / 2 empty % 2; } if (money 0) { total 0; } else { total money * 2 - 1; } printf(%d\n, total); return 0; } int Total(int money) { int total money; int empty money; while (empty 1) { total empty / 2; empty empty % 2 empty / 2; } return total; }对于这个题目首要目的是搞清喝汽水的问题如果先以5元为例那么看下图1代表饮料0代表空瓶那么5元可喝的饮料就是9瓶要在代码中实现这个问题关键是求出每次空瓶的数量emptyempty%2empty/2将这个公式拿到while循环中进行实现并且totaltotalempty/2当然也要开始定义moneyemptytotal这些变量。第二题是打印菱形代码为void Func(int line) //上半部分 { for (int i 0; i line; i) { for (int j 0; j line - 1 - i; j) { printf( ); } for (int k 0; k 2 * i 1; k) { printf(*); } printf(\n); } //下半部分 for (int i 0; i line - 1; i) { for (int j 0; j i1; j) { printf( ); } for (int k 0; k(line - 1 - i) * 2 - 1; k) { printf(*); } printf(\n); } } int main() { Func(7); return 0; }这个问题有两个关键点一是空格的数量二是星号数量。这个图形我们分上下两部分打印以第7行为临界点上半部分定义ijk分别代表行数空格星号。由上图规律可以看出来for (int j 0; j line - 1 - i; j){printf( );}for (int k 0; k 2 * i 1; k){printf(*);}这就是其规律在代码的实现三层for循环的嵌套下半部分下半部分在代码上和上半部分一样for(int j0;ji1;j){printf( );}for(int k0;k(line-1-i)*2-1;k){printf(*);}总体上来说这个打印图形的题难就难在找规律上规律一但明了就比较容易了。我也是看了好多遍才写出来。第三题求出0100000之间的所有“水仙花数”并输出。“水仙花数”是指一个n位数其各位数字的n次方之和确好等于该数本身如:1531^35^33^3则153是一个“水仙花数”。void Func() { for (int i 0; i 100000; i) { int count 0; int tmp i; while (tmp ! 0) { count; tmp tmp / 10; } tmp i; int sum 0; while (tmp ! 0) { sum pow(tmp % 10, count); tmp tmp / 10; } if (sum i) { printf(%d\n, i); } } } int main() { Func(); return 0; }首先要找出这个数字的位数又要找出这个数字的组成拿出来进行计算代码中引入了一个函数是pow其头文件是math.h用来计算x的y次幂。拿153举例把其拆解为 1 5 3需要让153/10然后153%10这样使用while循环让其进入循环拿count来计算位数第一次while循环结束后这个值变为0了为了后续计算我们使用tmp代替i第一次循环结束后再给其赋值让它保持原状即tmpi然后第二次while循环中sum函数将所有数字加起来tmp/10就是来将数字拆开进入sum里面。最后当sumi的时候打印这个i。此题结束。第四题求Snaaaaaaaaaaaaaaa的前5项之和其中a是一个数字例如222222222222222int Func(int n, int a) { int sum 0; int tmp 0; for (int i 0; i n; i) { tmp tmp * 10 a; sum tmp; } return sum; } int main() { printf(%d\n, Func(5, 2)); return 0; }要想实现这个题目也是找规律2 22 222 2222之间就是222*10222222*102 2222222*102这样就是nn*10a即代码中tmptmp*0a先定义sumtmp然后使用一个for循环定义i并将上述公式放入代码中并且使用sum将数字加起来就可以了。