浙江住房和城乡建设厅网站,揭阳住房和城乡建设厅网站,门户网站系统建设项目投标书,西安网站制作顶尖目录
前言#xff1a;
1.打印菱形
1.1补充练习
2.打印水仙花
2.1补充训练 前言#xff1a; 记录博主做题的收获#xff0c;以及提升自己的代码能力#xff0c;今天写的题目是#xff1a;打印菱形、打印水仙花数。
1.打印菱形 我们先看到牛客网的题#xff1a;OJ链…目录
前言
1.打印菱形
1.1补充练习
2.打印水仙花
2.1补充训练 前言 记录博主做题的收获以及提升自己的代码能力今天写的题目是打印菱形、打印水仙花数。
1.打印菱形 我们先看到牛客网的题OJ链接 题目解析多组输入一个值我们用n来控制用来控制菱形的打印。 思路将最长一行的之上的看成是上半部分包括最长一行在内的之下划为下半部分上部分是n行有n列每一列由空格和星号组成空格减少星号增多下半部分是n1行有n1列空格增多星号减少
#include stdio.hint main()
{int n 0;//1.多组输入while(scanf(%d, n) ! EOF){//i控制行int i 0;//2.打印上半部分for(i 0; i n; i){int j 0;//2.1打印对应行的空格列for(j 0; j n - i; j){printf( );}//2.2打印对应行的星号列for(j 0; j i; j){printf(* );}printf(\n);//一列打印完换行}//3.打印下半部分for(i 0; i n 1; i){int j 0;for(j 0; j i; j){printf( );}for(j 0; j n 1 - i; j){printf(* );}printf(\n);}}return 0;
}
1.1补充练习 打印出下面的图案 还是一样的思路分为上半部分和下半部分上面有6行那我们输入的时候就把n输进去一个6下半部分是7行也就是n1。
#include stdio.hint main()
{int n 0;scanf(%d, n);int i 0;for(i 0; i n; i){int j 0;for(j 0; j n - i; j){//看图会发现是两个空格printf( );}//第一次是1个后面每次增加2//i一开是为0没往下一行就多打印两个*for(j 0; j 1 2 * i; j){printf(* );}printf(\n);}for(i 0; i n 1; i){int j 0;for(j 0; j i; j){printf( );}//7行打印13个 2*n2是14减去1等于13刚好//对于下半部分第一行i为0不减没往下一行就多减2个星号的打印for(j 0; j 2*n 2 - 1 - 2*i; j){printf(* );}printf(\n);}return 0;
} 相信看完后读者对循环的掌控可以更如鱼得水一点~
2.打印水仙花 水仙花数的定义有一个n位数它的每一位数的n次方之和等于它本身。例如153这个数字153 1^3 5^3 3^3 1 125 27。 我们先看到牛客网的题OJ链接 题目的意思是说多组输入两个整数m和n输出在m和n范围内的水仙花数并且用空格隔开。水仙花在范围内[m,n]我们遍历的时候是就打印不是就跳过水仙化数自然是从小到大排列的。
#include stdio.h
#include math.hint main()
{int m, n;int flag 1//1.多组输入while(scanf(%d%d, m, n) ! EOF){//2.创建i并用i遍历区间[m,n]int i 0;for(i m; i n; i){//3.用k当做i的副本使用不要在循环内改变循环变量iint k i;int sum 0;while(k){//题目已知是三位数用3直接当做次方sum pow(k%10, 3);k / 10;}//4.如果加起来的sum等于i就是水仙花数if(sum i){printf(%d , i);//有打印就把flag改成0flag 0;}}//5.如果全部遍历完没有打印出一个水仙花flag没有被改成0//就在这里打印出noif(flag){printf(no);}}
} 解释看到第3步骤假设k是123进入循环k取模上10得到3pow(3, 3)是3的3次方然后k / 10123除以10商12把12赋值给了k接着循环直到k / 10把商为0赋值给k循环结束。 补充注意sum要定义在for循环内不能定义在for循环外这样sum在每次重新判断一个数是不是水仙数的时候都会带着上次求的sum值。或者定义在外面每次for循环重新赋值成0。
2.1补充训练 打印0-100000十万之间的水仙花数。
#include stdio.h
#include stdio.hint main()
{int i 0;for(i 0; i 100000; i){//1.求i的几位数的int n 1;int m i;while(m/10){n}//2.求每一位数的n次阶乘之和m i;int sum 0;while(m){sum pow(m%10, n);m / 10;}//3.判断sum等不等于iif(sum i){printf(%d , i);}}return 0;
} 解释求i是几位数的时候n从1开始是因为假设我们此时i是12m被初始化为12m/10会以1的值进入循环并被赋值成1然后n一次接着m/10为商0余1进不去循环了如果一开始我们的n是从0开始的那么只经过一次nn为1实际上i是两位数所以n一开始设成1这是因为无论是什么数一开始都有一位数。 总结多组输入的方法、控制循环的训练、将一个整数一个一个剥离下来的方法、以及锻炼手敲代码的能力和不怕出错进行调试的抗压心态。 希望大家读完可以自己找到题目实现一遍祝读者们有所收获。喜欢的话麻烦留个小赞再走呗