针对C语言入门OJ题
(入门)BC72-平均身高_牛客题霸_牛客网 (nowcoder.com)
参考代码:
//代码一 #include <stdio.h> int main() { int i = 0; float hi = 0.0; float sum = 0.0; for(i=0; i<5; i++) { scanf("%f", &hi); sum += hi; } printf("%.2f\n", sum/5.0); return 0; }
//代码二 #include <stdio.h> int main() { int i = 0; float hi[5] = {0}; float sum = 0.0; for(i=0; i<5; i++) { scanf("%f", &hi[i]); } for(i=0; i<5; i++) { sum += hi[i]; } printf("%.2f\n", sum/5.0); return 0; }
(简单)BC74-HTTP状态码_牛客题霸_牛客网 (nowcoder.com)
解析:
状态码比较多,且为整数,所以可以考虑用 switch 语句。
参考代码:
#include <stdio.h> int main() { int state = 0; while(scanf("%d", &state) != EOF) { switch(state) { case 200: printf("OK\n"); break; case 202: printf("Accepted\n"); break; case 400: printf("Bad Request\n"); break; case 403: printf("Forbidden\n"); break; case 404: printf("Not Found\n"); break; case 500: printf("Internal Server Error\n"); break; case 502: printf("Bad Gateway\n"); break; } } return 0; }
(简单)BC75-数字三角形_牛客题霸_牛客网 (nowcoder.com)
解析:
需要分析清楚每行打印的内容。
参考代码:
#include <stdio.h> int main() { int n = 0; while(scanf("%d", &n) != EOF) { int i = 0; //打印的行数 for(i=1; i<=n; i++) { //打印一行的内容 int j = 0; for(j=1; j<=i; j++) { printf("%d ", j); } printf("\n"); } } return 0; }
(简单)BC76-公务员面试_牛客题霸_牛客网 (nowcoder.com)
解析:
一边输入,一边求和,一边求最大值和最小值,最后算平均值。
参考代码:
#include <stdio.h> int main() { int i = 0; int sum = 0; int min = 100;//假设最小值是100 int max = 0;//假设最大值是0 int score = 0; for(i=0; i<7; i++) { scanf("%d ", &score);//输入成绩 sum += score;//成绩求和 if(score > max) max = score;//求最大值 if(score < min) min = score;//求最小值 } printf("%.2f\n", (sum-min-max)/5.0);//输出去掉最高分和最低分的平均成绩,并换行 return 0; }
(简单)BC77-有序序列插入一个数_牛客题霸_牛客网 (nowcoder.com)
解析:
从后往前比较数字找到合适的位置就可以插入数字了,但是如果插入的数字比所有的元素都
小,那就插入到第一个位置上(特殊情况)。(做类似题目需要考虑多种情况-边界值)
参考代码:
//代码一 #include <stdio.h> int main() { int n = 0; int arr[51] = {0};//0~51 int m = 0;//要插入的数据 scanf("%d", &n);//输入数据 int i = 0; for(i=0; i<n; i++) { scanf("%d", &arr[i]); } scanf("%d", &m);//输入要插入的数据 //插入数据的处理 for(i=n-1; i>=0 ; i--) { if(arr[i]> m) { arr[i+1] = arr[i]; } else { arr[i+1] = m; break; } } //如果插入数字小于所有的数字 if(i < 0) { arr[0] = m; } //打印 for(i=0; i<n+1; i++) { printf("%d ", arr[i]); } return 0; }
//代码二 #include <stdio.h> int main() { int n = 0; int arr[50] = {0}; int m = 0;//要插入的数据 //输入数据 scanf("%d", &n); int i = 0; for(i=0; i<n; i++) { scanf("%d", &arr[i]); } scanf("%d", &m); //处理 for(i=n; i>0 ; i--) { if(arr[i-1]> m) { arr[i] = arr[i-1]; } else { arr[i] = m; break; } } //如果插入数字小于所有的数字 if(i == 0) { arr[i] = m; } //打印 for(i=0; i<n+1; i++) { printf("%d ", arr[i]); } return 0; }
(简单)BC78-筛选法求素数_牛客题霸_牛客网 (nowcoder.com)
参考代码:
//代码一(与代码二无差) #include <stdio.h> //方法1:筛选法 int main() { int n = 0; while (~scanf("%d", &n)) { //int arr[n+1];//变长数组 //初始化数组的内容为0-n int arr[101];//将数字与数组下标相对应 int i = 0; //存储数据 for (i = 2; i<=n; i++) { arr[i] = i; } //列举所有的除数 int j = 0; for (j = 2; j <= n; i++) { int k = 0; for (k = j + 1; k <= n; k++) { if (arr[k] % j == 0) arr[k] = 0; } } //输出并记录 int count = 0; for (i = 2; i <= n; i++) { if (arr[i] != 0) printf("%d ", arr[i]); else count++; } printf("\n%d\n", count); } return 0; }
//代码二和代码三不是题目要求的筛选法(在这里不建议用使用) //代码二(与代码三无差) //方法2:试除法 int main() { int n = 0; //题目相当于打印n以内的素数 while(scanf("%d", &n) != EOF) { int i = 0; int count = 0; for(i=2; i<=n; i++) { //判断i是否为素数 //2->i-1之间的数字 int j = 0; for(j=2; j<i; j++) { if(i%j == 0) { count++; break; } } if(j == i) printf("%d ", j); } printf("\n%d\n", count); } return 0; }
//代码三 //方法2:试除法 int is_prime(int n) { int i = 0; for(i=2; i<n; i++) { if(n%i == 0) return 0; } return 1; } int main() { int n = 0; //题目相当于打印n以内的素数 while(scanf("%d", &n) != EOF) { int i = 0; int count = 0; for(i=2; i<=n; i++) { if(is_prime(i)==1) { printf("%d ", i); } else { count++; } } printf("\n%d\n", count); } return 0; }
(简单)BC79-图像相似度_牛客题霸_牛客网 (nowcoder.com)
解析:
- 求两个二维数组的相同元素个数。
- 求百分比要注意 *100.0,小数点后保留2位。
参考代码:
#include <stdio.h> int main() { int m = 0; int n = 0; int a[100][100] = {0},b[100][100] = {0}; scanf("%d%d", &m, &n); int i = 0; int j = 0; int count = 0.0; //输入数据 for(i=0; i<m; i++) { for(j=0; j<n; j++) { scanf("%d", &a[i][j]); } } for(i=0; i<m; i++) { for(j=0; j<n; j++) { scanf("%d", &b[i][j]); } } //求相同元素的个数 for(i=0; i<m; i++) { for(j=0; j<n; j++) { if(a[i][j] == b[i][j]) { count++; } } } printf("%.2f\n", 100.0*count/(m*n));//求相似度注意乘以100 return 0; }
(简单)BC80-登录验证_牛客题霸_牛客网 (nowcoder.com)
解析:
两个字符串比较大小不能使用 == ,得使用 strcmp 函数(需要引用#include <string.h>头文件),比较的是两个字符串中对应字符的 ASCII 码值。
参考代码:
#include <stdio.h> #include <string.h> int main() { char name[100] = {0}; char password[100] = {0}; while(scanf("%s %s", name, password) != EOF) { //两个字符串比较相等 if(strcmp(name, "admin")==0 && strcmp(password, "admin")==0) { printf("Login Success!\n"); } else { printf("Login Fail!\n"); } } return 0; }
(简单)BC85-包含数字9的数_牛客题霸_牛客网 (nowcoder.com)
解析:
要判断一个数字是否包含 9, 看这个数字的某一位是否为 9 即可,只要某一位为 9 就停下来。
参考代码:
#include <stdio.h> int main() { int i = 0; int count = 0; for(i=1; i<=2019; i++) { //判断i是否包含9 int t = i; while(t) { if(t%10 == 9) { count++; break; } t = t/10; //t /= 10; } } printf("%d\n", count); return 0; }
(入门)BC86-奇偶统计_牛客题霸_牛客网 (nowcoder.com)
解析:
- 代码一就是统计奇数的个数,再算出偶数的个数。
- 代码二是根据数字的个数推算的。
- 代码三与代码二无差
参考代码:
//代码一 #include <stdio.h> int main() { int n = 0; scanf("%d", &n); int i = 0; int odd = 0;//奇数 int even = 0;//偶数 for(i=1; i<=n; i++) { if(i%2==1) odd++; } printf("%d %d\n", odd, n-odd); return 0; }
//代码二 #include <stdio.h> int main() { int n = 0; scanf("%d", &n); int odd = 0;//奇数 if(n%2==0) odd = n/2;//如果n是偶数,则奇数和偶数一样多 else odd = n/2+1;//如果n是奇数,则奇数比偶数多1 printf("%d %d\n", odd, n-odd); return 0; }
//代数三 #include <stdio.h> int main() { int n = 0; scanf("%d", &n); if(n%2==1) printf("%d %d\n", n/2+1, n/2); else printf("%d %d\n", n/2, n/2); return 0; }
1