👩💻博客主页:风起 风落的博客主页
✨欢迎关注🖱点赞🎀收藏⭐留言✒
👕参考网站:牛客网
💻首发时间:🎞2022年7月27日🎠
🎨你的收入跟你的不可替代成正比
🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦
💬给大家介绍一个求职刷题收割offer的地方👉点击进入网站
在这里插入图片描述
@TOC
1.BC112 小乐乐求和
描述
小乐乐最近接触了求和符号Σ,他想计算的结果。但是小乐乐很笨,请你帮助他解答。
输入描述:
输入一个正整数n (1 ≤ n ≤ 109)
输出描述:
输出一个值,为求和结果。
示例1
输入:
1
输出:
1
示例2
输入:
10
输出:
55
#include<stdio.h> int main() { int n=0; scanf("%d",&n); int i=0; long long ret=0; for(i=1;i<=n;i++) { ret+=i; } printf("%ld\n",ret); return 0; }
在这里插入图片描述
>
这道题看似简单 实际上 如果 ret 设计成int 返回值用%d接收,就会报错
在这里插入图片描述实际输出的结果比预期结果少了一位 由此我们可以想到一个问题 是不是越界了int 为4个字节 28个比特位 即2^27 我们使用 long long 接收就可以解决了2.BC107 矩阵转置
描述
KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。
输入描述:
第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
输出描述:
输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。
示例1
输入:
2 3
1 2 3
4 5 6
输出:
1 4
2 5
3 6
#include<stdio.h> int main() { int i=0; int j=0; int m=0; int n=0; scanf("%d%d",&m,&n); int arr1[10][10]={0}; for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&arr1[i][j]); } } int arr2[10][10]={0}; for(i=0;i<n;i++)//3 { for(j=0;j<m;j++)//2 { arr2[i][j]=arr1[j][i]; printf("%d ",arr2[i][j]); } printf("\n"); } }
在这里插入图片描述
这道题主要考察了对数组的理解程度
主要思路 :创建两个二维数组 : arr1[10][10],arr2[10][10]
用第一个二维数组接收输入进来的值
用第二个二维数组接收要转换过来的值
即第一次 行为m 列为n
第二次 行为n 列为m
把第一个二维数组满意的值传到第二个二维数组里
3.BC109 杨辉三角
描述
KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。
输入描述:
第一行包含一个整数数n。 (1≤n≤30)
输出描述:
包含n行,为杨辉三角的前n行,每个数输出域宽为5。
示例1
输入:
6
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
#include<stdio.h> int main() { int i=0; int j=0; int n=0; scanf("%d",&n); int arr[30][30]={0}; for(i=0;i<n;i++) { for(j=0;j<=i;j++) { if(j==0||i==j) { arr[i][j]=1; printf("%5d",arr[i][j]); } else { arr[i][j]=arr[i-1][j]+arr[i-1][j-1]; printf("%5d",arr[i][j]); } } printf("\n"); } }
在这里插入图片描述
这道题想要搞懂, 就先看好它是由什么构成的
首先 为一个三角形 所以写了一个三角形的双for
把每一个点都看作 坐标
即第一列都为1
行与列相等的坐标 都为1
所以 写了个if语句
而其他的坐标都为 上一个坐标和上一个左边的坐标加和
不要忘记换行
4.BC38 变种水仙花
描述
变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。
例如:
655 = 6 * 55 + 65 * 5
1461 = 1461 + 1461 + 146*1
求出 5位数中的所有 Lily Number。
输入描述:
无
输出描述:
一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格。
#include<stdio.h> int main() { int i=0; int j=0; int ret=0; for(i=10000;i<=99999;i++) { ret=0; for(j=10;j<=10000;j*=10) { ret=ret+(i/j)*(i%j); } if(ret==i) { printf("%d ",i); } } return 0; }
在这里插入图片描述
相对于正常的水仙花数 有点绕
如果想不到 直接 将所有情况列举出来 然后加和跟i比较也是可以的
观察1461 就知道 先从 /10 %10 开始 到/1000 %1000 每次 * 10
1461作为一个4位数 最后/1000
那5位数肯定最后/10000 %10000
每次再*10就可以了
总结
通过以上来自牛客网的练习题
相信会对学习c语言更有兴趣 ,让我们一起加油吧
不太自信的小伙伴可以看看这个训练
在这里插入图片描述