牛客刷题记录之语法入门循环结构篇1.0
(一)1001-双层金字塔
(二)1002-数字三角形
题目描述
打印数字三角形,从1开始输出,第i行输出i个数,每个数字按4个位置输出
注:c语言中 %4d可以输出一个数,占据四个位置,右对齐。
输入描述:
输入一行,包含一个整数n1 <= n <= 1000
输出描述:
输出n行,第i行,有i个数, 每个数占据四个位置。
输入
4
输出
12 34 5 67 8 9 10
过程: 第一遍的时候一直格式错误,以为是每个数字前面三个空格就行。后来试了一下9和10之间的空格,发现只有两个,这个时候才看到题目。
总结:c语言中 %4d可以输出一个数,占据四个位置,右对齐。
代码:
#include<stdio.h>
int main(){int n,i,j;int m=1;scanf("%d",&n);for ( i=0;i<n;i++ ){ //行for ( j=0;j<i+1;j++ ){ //每行的数printf(" %d",m);m+=1; //逐次递增}printf("\n"); //换行}
}
(三)1003-字符金字塔
题目描述
请打印输出一个字符金字塔,字符金字塔的特征请参考样例
输入描述:
输入一个字母,保证是大写
输出描述:
输出一个字母金字塔。
输入
C
输出
AABA
ABCBA
过程:第一步是数字和字母之间要有联系,第二步是循环行数,第三步是把每行划分成两部分,一部分是从A慢慢变大,另一部分是从中间最大的字母慢慢变到A。在平台看了大佬的这篇文章,套用大佬的方法写出来的。
https://blog.csdn.net/a312568/article/details/104828151?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2-104828151-blog-122745706.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2-104828151-blog-122745706.pc_relevant_multi_platform_whitelistv1&utm_relevant_index=5
总结: 可以利用flag指针思想,来判断什么时候循环结束。
#include<stdio.h>
int main(){char a;int flag;int i,j;scanf("%c",&a);int as=a-64;for ( i=0;i<as;i++){char b='A';flag=0;for (j=0;j<as-1-i;j++){printf(" ");}while (flag<=i){printf("%c",b);flag+=1;b+=1;}flag-=1;b-=1;if (flag!=0){while (flag){b-=1;printf("%c",b);flag--;}}printf("\n");}return 0;
}
(四)1004-涂小天和他的画
题目描述
涂小天是个画家,他希望有一天他的画能让心仪的她看到。
只是后来她有了他,他却只有他的画,他望着他的画,默默的发呆。
可惜做题的你,画不出他画的她,所以,我们只好画点简单的画,或许有一天,你就会遇到画里她/他吗?
因此我们规定画画的内容:输入一个正整数 n(n为奇数),输出高度为 n 的菱形,例如 n = 5 时,输出
*
***
*****
***
*
输入描述:
第一行输入一个整数T,代表有T组测试数据。
每组数据占1行,包括一个整数n(1 <= n<= 49,n为奇数)
输出描述:
对于每组数据,输出对应的图形,每行行末不要有空格。
输入
3
1
3
5
输出
**
********
*********
总结:第一步是输入问题,第二步是自定义函数,第三步是写函数。但是我最开始的答案在DEV C++上运行的时候编译没问题,在牛客上显示编译错误。
原因是不需要变量初始化,所以我把int Array[T]={};改成int Array[T];之后就通过测试了。
(五)1005-箭形图案
题目描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。
输入描述:
本题多组输入,每行一个整数(2~20)。
输出描述:
针对每行输入,输出用“*”组成的箭形。
输入
2
输出
***
******
输入
3
输出
******
**********
输入
4
输出
**********
***************
总结:第一步是注意输入是多组输入,连续输入;第二步是空格和星号。
代码:
#include<stdio.h>
int main(){int a;while (scanf("%d",&a)!=EOF){for (int i=0;i<=a;i++){for (int j=0;j<2*a-2*i;j++){printf(" ");}for (int k=0;k<i+1;k++){printf("*");}printf("\n");}for (int i=0;i<a;i++){for (int j=0;j<2*(i+1);j++){printf(" ");}for (int k=0;k<a-i;k++){printf("*");}printf("\n");}}return 0;
}
(六)1006-牛牛学数列
题目描述
牛牛开始学习数列啦
现在他想知道1-2+3-4...+n的值
输入描述:
输入一个整数n (1≤n≤1001 \le n \le 1001≤n≤100)
输出描述:
输出一个整数
输入
4
输出
-2
总结:每次加数的时候乘个-1就行,但是得重新用一个k来连接,因为i如果变化的话,循环还怎么正常下去呢。
#include<stdio.h>
int main(){int n,sum;scanf("%d",&n);int k=1;for (int i=1;i<=n;i++){sum+=k*i;k=-k;}printf("%d",sum);return 0;
}
(七)1007-牛牛学数列2
题目描述
这次牛牛又换了个数列,他想计算:1+1/2+1/3+…+1/N的值。(保留6位小数)
输入描述:
输入一个整数,范围在0到1000
输出描述:
输出一个浮点数
输入
2
输出
1.500000
总结:设置k为i的倒数,一路加就行。
#include<stdio.h>
int main(){int n;double sum;scanf("%d",&n);double k;for (int i=1;i<=n;i++){k=1.0/i;sum+=k;}printf("%.6f",sum);return 0;
}
(八)1008-牛牛学数列
题目描述
牛牛准备继续进阶,计算更难的数列
输入一个整数n,计算 1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5-...((-1)^(n-1))*(2n-1))的值
输入描述:
输入一个整数
输出描述:
输出一个浮点数,保留3位小数
输入
1
输出
1.000
总结:我最开始是把设置的k放在了循环外面,导致出错了,发现这样的话逐次的分母都不对,应该要把k放置在小循环外面,但是要在大循环里面。
代码:
#include<stdio.h>
int main(){int n,sum;scanf("%d",&n);
// int k=1;不能写在大循环外面double m,Sum;for (int i=0;i<n;i++){int k=1;for (int j=0;j<i+1;j++){sum+=k*(2*j+1);k=-k;}m=1.0/(sum);Sum+=m;sum=0;}printf("%.3f",Sum);return 0;
}
(九)1010-牛牛学数列5
题目描述
求fib数列的第n项,前几项是1,1,2,3,5,每一项都等于前面两项的和
输入描述:
输入一个整数n,n<=46
输出描述:
输出一个整数
输入
2
输出
1
总结:最先接触的是python,脑子太懒了,思路一开始就错了。我想的是两个容器,存放k和j,k最初是0,j最初是1,然后把k+j的结果放在j里面,把j的值替换给k。这个思路有两个点不对,第一个点是j已经被替换掉了,k此时把j的值替换过来的话,换的是后来的j,第二个点我一直没发现。后来自己举例子试了一下,在纸上画了一下,发现如果是只有两个容器的话,操作是这样的。
i = 0 | j = 1 | k = 1 |
i = 1 | j = 2 | k = 2 |
在第二步的计算中,j和K的值就不对了。仔细分析了一下,两数之间相互调换,需要的是三个容器。
代码:
#include<stdio.h>
int main(){int n;while (scanf("%d",&n)!=EOF){int k=0;int j=1;int m;//最开始是这么写的循环
// for (int i=0;i<n-1;i++){
// j=k+j;
// k=j;
// }for (int i=0;i<n-1;i++){m=j;j=k+j;k=m;}printf("%d",j);
}
}
(十)1011-牛牛学数列6
题目描述
有一个数列
已知
A1=0A_1=0A1=0
A2=1A_2=1A2=1
A3=1A_3=1A3=1
A4=A1+2∗A2+A3A_4=A_1+2*A_2+A_3A4=A1+2∗A2+A3
A5=A2+2∗A3+A4A_5=A_2+2*A_3+A_4A5=A2+2∗A3+A4
......
求AnA_nAn
输入描述:
输入一个整数n (1≤n≤201 \le n \le 201≤n≤20)
输出描述:
输出一个整数
输入
4
输出
3
总结:三个数之间交换,需要一个空容器。 把第一步补充一下,设置为a0=0,a1=0,a2=1,这样更系统化。最后注意的是,需要把输入1时的情况单独提出来写。
Array[0] | Array[1] | Array[2] |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 3 |
代码:
#include<stdio.h>
int main(){int n;scanf("%d",&n);int sum; //三个数交换时准备的空容器int Array[3]={0,0,1};if (n==1)printf("%d",0);else{for (int i=0;i<n-2;i++){sum=Array[0]+2*Array[1]+Array[2];Array[0]=Array[1];Array[1]=Array[2];Array[2]=sum;}printf("%d",Array[2]);}return 0;}
(十一)1013-多组输入a+b
题目描述
计算a+b
输入描述:
输入包含多组数据,每组数据输入一行,包含两个整数
输出描述:
对于每组数据输出一行包含一个整数表示两个整数的和
输入
1 2
3 4
输出
3
7
总结:从博主那里发现了一种新写法!在scanf前面加个~也可以进行多组输入,按位取反,把二进制中的0变成1,1变成0,导致只有scanf返回-1循环才会结束,也就是要返回EOF为止。
while (scanf("%d %d",&a,&b)!=EOF)
while (~scanf("%d %d",&a,&b))
代码:
#include<stdio.h>
int main(){int a,b;while (~scanf("%d %d",&a,&b))printf("%d\n",a+b);return 0;
}
(十二)1016-标题统计
题目描述
凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?
注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字 符数时,空格和换行符不计算在内。
输入描述:
输入文件只有一行, 一个字符串s。
输出描述:
输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。
输入
234
输出
3
输入
Ca 45
输出
4
总结:1.python可以直接输入字符串,可是C不行,它只能单个字符数组组合起来,用char [ ];
2.读入字符数组要用% [^\n]或者%s;
3.查询字符数组长度的时候,需要补充头文件#include<string.h>,然后使用strlen()。
代码:
#include<stdio.h>
#include<string.h>
int main(){char s[1000];int len,sum=0;scanf("%[^\n]",s);len=strlen(s);for (int i=0;i<len;i++){if (s[i]!=' ')sum++;}printf("%d\n",sum);
}
(十三)1017-栗酱数数
题目描述
栗酱在酒桌上玩一个小游戏,第一个人从1开始数数,如果遇到数字中含4或者数字是4的倍数则跳过报下一个,谁数错了就要罚酒一杯。
所以栗酱想让你写个程序把所有数生成出来,这样她就可以作弊直接读了。你一定能解决的吧?
输入描述:
只有一组数据,一个数n代表从1开始数到n。(n≤100000)
输出描述:
按顺序输出所有1到n之间任何一位都不是4的数,每两个数之间用一个回车隔开。
输入
9
输出
1
2
3
5
6
7
9
过程:没注意审题,第一遍的时候只除掉了4的倍数,后来才觉得哪里不对。
总结:判断一个数是不是含有4,可以写一个自定义函数finfour,返回bool类型。但是牛客是Linux编译器下的C,要补充头文件<stdbool.h>。函数中,从个位开始看,看看个位是不是4,然后while循环逐次/10,也就是位数慢慢往前移,慢慢往前去判断。
代码:
#include<stdio.h>
#include<stdbool.h>
bool findfour(int a){while ( a>0 ){if ( a%10==4 )return false;elsea=a/10;}return true;
}int main(){int n;scanf("%d",&n);for (int i=1;i<=n;i++){if (i%4!=0 && findfour(i))printf("%d\n",i);}
}
牛客刷题记录之语法入门循环结构篇1.0相关推荐
- 【牛客刷题记录】2021-03-10
牛客代码刷题记录1 问题一 给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个: 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输 ...
- PYTHON 牛客刷题记录
文章目录 一.牛客-简单类 1.HJ81 字符串字符匹配--SET使用 2.二维数组操作--map(),split()使用 3.HJ8 合并表记录--sorted().字典输出 4.HJ80 整型数组 ...
- 【Shell牛客刷题系列】SHELL5 打印空行的行号:一起学习grep命令搭配正则表达式的使用
该系列是基于牛客Shell题库,针对具体题目进行查漏补缺,学习相应的命令. 刷题链接:牛客题霸-Shell篇. 该系列文章都放到专栏下,专栏链接为:<专栏:Linux>.欢迎关注专栏~ 本 ...
- 牛客刷题-Java面试题库【动态更新添加题目】(2023.06.19更新)
讲在前面 ✨ 牛客刷题日记–理解为重中之重 刷题一方面是持续的了解到自己哪方面比较欠缺,另一方面也是从各大厂的面试题可以看出当前所需的技术栈的偏重点,持续的巩固基础和查漏补缺,一如代码深似海–学无止境 ...
- 【牛客刷题专栏】0x27:JZ29 顺时针打印矩阵(C语言编程题)
前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失. 个人刷题练习系列专栏:个人CSDN牛客刷题专栏. 题目来自:牛客/题库 / 在线编程 / 剑 ...
- 牛客刷题日记(2021-11-24)
牛客刷题日记(2021-11-24) 题目: 下面程序的输出是:() String x="fmn"; x.toUpperCase(); String y=x.replace('f' ...
- 最长上升子序列(LIS),牛客刷题
目录: 最长上升子序列(LIS) 1.模板(数据较小) 2.模板(数据较大) 牛客刷题 1. 牛客练习赛107A:如见青山 2.牛客小白月赛65A牛牛去购物 3.牛客小白月赛65B牛牛去购物 4.牛客 ...
- 牛客刷题日记(2021-12-8)
牛客刷题日记(2021-12-8) 题目: 以下哪个接口的定义是正确的?( )interface B { void print() { } ;}interface B { static void pr ...
- 【字节面试题】牛客刷题偶遇字节后端笔试面经 撸它
想要看更加舒服的排版.更加准时的推送 关注公众号"不太灵光的程序员" 每日八点有干货推送,微信随时解答你的疑问 牛客刷题偶遇 字节后端笔试0715 撸它 一共两道编程题. 1. 给 ...
最新文章
- RocketMQ NameServer网络通信架构(基于Netty)
- mysql中文注释语法报错_Linux系统Python配置MySQL详细教程
- boost::thread模块实现默认执行器的测试程序
- ITK:使用写访问权访问图像中的迭代区域
- Hyper-V虚拟机自动添加检查点和导出备份
- 30个HTML标签,10.30 html标签
- 嵌入式linux设备驱动程序是,嵌入式Linux设备驱动开发之:按键驱动程序实例-嵌入式系统-与非网...
- ta-lib依赖安装问题
- MS Sql Server 数据库或表修复(DBCC CHECKDB)
- 消息队列状态:struct msqid_ds
- 微信修改步数(卡密版)
- 云钻还在吗 苏宁怎么解除实名认证_苏宁怎么撤销实名认证
- ROG 2022 款幻 13 评测
- 通过 mpu6050加速度计算角度
- 【day13】【洛谷算法题】-P5713洛谷团队系统-刷题反思集[入门2分支结构]
- 史上最全的 SQL 注入资料,收藏不谢
- 认养农业菜园认租如何助力农业发展?
- EBS中应用,职责,数据组,请求组等关系
- 走进施耐德电气无锡工厂,见证自动化研发中心开幕
- C语言递归函数(递归调用)详解[带实例演示]