网站整站开发教程关键词排名优化工具有用吗
引言
针对初学者,每日练习几个题,快速上手C语言。第九天。(连续更新中)
采用在线OJ的形式
什么是在线OJ?
在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用来测试参赛程序的在线系统,也可以用于平时的练习。
详细内容可以看一下这篇博客:关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客https://blog.csdn.net/2401_88433210/article/details/146056171?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
建议从第一天开始做,前面讲了的知识点后面只是会提一下。有不懂的写再评论区里
1.统计成绩
点进去直接做题:统计成绩_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/cad8d946adf64ab3b17a555d68dc0bba?tpId=107&&tqId=33368&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>
int main()
{double n;scanf("%lf",&n);double maxx=0,minn=1e9,average=0,sum=0;//根据题目给的范围给定一个较大的min值for(int i=0;i<n;++i){double x;scanf("%lf",&x);//每输入一次就进行一次判断和加和if(x>maxx)maxx=x;if(x<minn)minn=x;sum+=x;}average=sum/n;printf("%.2f %.2f %.2f",maxx,minn,average);return 0;
}
解析:输入的同时就最大值最小值和求和,然后计算想要的结果。
2.密码验证
点进去直接做题:密码验证_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/895b3b552d80485cb5e426a0ebf9a251?tpId=107&&tqId=33370&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>#include <string.h>int main(){char s1[100] = {0};char s2[100] = {0};scanf("%s %s", s1, s2);if(strcmp(s1, s2) == 0)printf("same\n");elseprintf("different\n");return 0;}
解析:密码是字符串,字符串的比较函数使用strcmp函数。
3.矩阵计算
点进去直接做题:矩阵计算_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/0c83231923c541d2aa15861571831ee5?tpId=107&&tqId=33371&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
代码一:
#include<stdio.h>
int main()
{int n,m,i,j;int sum=0;int a[10][10]={0};scanf("%d %d",&n,&m);for(i=0;i<n;i++){for(j=0;j<m;j++){scanf("%d ",&a[i][j]);if(a[i][j]>=0)sum+=a[i][j];}}printf("%d\n",sum);
}
代码二:
#include <stdio.h>int main(){int m = 0;int n = 0;scanf("%d %d", &m,&n);int i = 0;int j = 0;int tmp = 0;int sum = 0;for(i=0; i<n; i++){for(j=0; j<m; j++){scanf("%d", &tmp);if(tmp > 0)sum += tmp;}}printf("%d", sum);return 0;}
解析: 在输入的同时,将大于0的数求和。
4.逆序输出
点进去直接做题:逆序输出_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/bb66c27cb7aa48f9ba7d9f88e4068285?tpId=107&&tqId=33373&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>int main()
{int a[20];for(int i = 9; i >= 0; i--){scanf("%d ",&a[i]);}for(int i = 0; i < 10; i++){printf("%d ",a[i]);}return 0;
}
解析:很简单,不想多说什么。
5.统计数据正负个数
点进去直接做题:统计数据正负个数_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/3f33889582934a09b4e3ddd3cc976226?tpId=107&&tqId=33374&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>int main(){int i = 0;int positive = 0;int negative = 0;int tmp = 0;for(i=0; i<10; i++){scanf("%d", &tmp);if(tmp>=0)positive++;elsenegative++;}printf("positive:%d\n", positive);printf("negative:%d\n", negative);return 0;}
解析:不想说什么,太简单了,有手就行。
6.N个数之和
点进去直接做题:N个数之和_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/b007744eb43b4f7b95d9e87de01528db?tpId=107&&tqId=33375&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include<stdio.h>
int main()
{int n = 0;int sum = 0;int ret = 0;scanf("%d",&n);for(int i = 0;i<n;i++){scanf("%d",&ret);sum += ret;}printf("%d\n",sum);return 0;
}
解析:不想说什么,太简单了,有手就行,不会的回家的。
7.最高分与最低分之差
点进去直接做题:最高分与最低分之差_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/e0e4f81dcd55408a8973f8033bbeb1d2?tpId=107&&tqId=33376&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
int main()
{int n = 0;int m = 0;int max = 0;int min = 100;scanf("%d",&n);for(int i = 0;i<n;i++){scanf("%d", &m);if(m>max){max = m;}if(m<min){min = m;}}printf("%d",max-min);return 0;
}
解析:学以致用,用前面学过的一个得最大值最小值的技巧。
8.有序序列判断
点进去直接做题:有序序列判断_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/22e87f8a8d764a6582710f38d1b40c6e?tpId=107&&tqId=33377&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>int main(){int n = 0;int arr[50] = {0};scanf("%d", &n);int i = 0;int flag1 = 0;int flag2 = 0;for(i=0; i<n; i++){scanf("%d", &arr[i]);if(i>0){if(arr[i]>arr[i-1])flag1 = 1;else if(arr[i]<arr[i-1])flag2 = 1;}}//flag1 和 flag2 都为1是乱序的if(flag1+flag2 > 1)printf("unsorted\n");elseprintf("sorted\n");return 0;
}
解析:
题目中设置2个标记变量,flag1,flag2,满足相邻2个元素升序把flag1设置为1,满足相邻2个元 素降序把flag2设置为1.如果flag1和flag2都是1,那就是乱序。 (很巧妙的技巧)
编程就是要有创新精神。
9.序列中删除指定数字
点进去直接做题:序列中删除指定数字_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/7bbcdd2177a445a9b66da79512b32dd7?tpId=107&&tqId=33379&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>int main(){int n = 0;int arr[50] = {0};int m = 0;//输入数据
scanf("%d", &n);int i = 0;int j = 0;for(i=0; i<n; i++){scanf("%d", &arr[i]);}scanf("%d", &m);for(i=0; i<n; i++){if(arr[i] != m){arr[j++] = arr[i];}}for(i=0; i<j; i++){printf("%d ", arr[i]);}return 0;}
解析:把代码模拟一遍就可以看懂了
要考虑删除多个相同的数字。
10.序列中整数去重
点进去直接做题:序列中整数去重_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/6564a2f6e70f4153ad1ffd58b2b28490?tpId=107&&tqId=33380&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>int main(){int n = 0;int arr[5000] = {0};//输入数据scanf("%d", &n);int i = 0;for(i=0; i<n; i++){scanf("%d", &arr[i]);}//去重for(i=0; i<n; i++){int j = 0;for(j=i+1; j<n; j++){//先找出相同的元素//如果相等,要把后续元素往前移动if(arr[i] == arr[j]){int k = 0;for(k=j; k<n-1; k++){arr[k] = arr[k+1];}n--;//去重一个,个数少1j--;//如果去重了arr[j]//把下一个位置的数字arr[j+1],放在新的arr[j]上//恰好又和arr[i]相同,所以也要再判断//3 2 3 3 3 4 5}}}for(i=0;i<n; i++){printf("%d ", arr[i]);}return 0;}
解析:看着代码多思考,多想。
11.有序序列合并
点进去直接做题:有序序列合并_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/a9e943b0dab142759807d0cfb6863897?tpId=107&&tqId=33381&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
代码一:
int main() {int a, b;int arr1[1010], arr2[1010], arr3[2020];scanf("%d %d",&a,&b);for(int i = 0; i < a; i++) scanf("%d ",&arr1[i]); for(int i = 0; i < b; i++) scanf("%d ",&arr2[i]); int t1 = 0, t2 = 0, t = 0;while(t1 < a && t2 < b){if(arr1[t1] > arr2[t2]) {arr3[t++] = arr2[t2++];}else{arr3[t++] = arr1[t1++];}}while(t1 < a) arr3[t++] = arr1[t1++];while(t2 < b) arr3[t++] = arr2[t2++];for(int i = 0; i < a + b; i++){printf("%d ",arr3[i]);}return 0;
}代码二:
#include<stdio.h>
int n, m; int a[2020], b[1010];
int main()
{scanf("%d %d", &n, &m);int t = n + m, t1 = n, t2 = m;for (int i = 1; i <= n; i++) scanf("%d ", &a[i]);for (int i = 1; i <= m; i++) scanf("%d ", &b[i]);while ( t1 >= 1 && t2 >= 1){if (a[t1] > b[t2]) a[t--] = a[t1--];else a[t--] = b[t2--];}while (t2 >= 1) a[t--] = b[t2--];for (int i = 1; i <= n + m; i++) printf("%d ", a[i]);return 0;
}
解析:
代码一:通过一个辅助数组来存数据,最后使两个数组和并成一个数组使其有序。
代码二:在一个数组上做处理,很巧妙,多看代码多悟。
做题时,一定要在脑子中有画面,多想象。