针对C语言入门OJ题(牛客网)https://www.nowcoder.com/
(简单)BC23-时间转换_牛客题霸_牛客网 (nowcoder.com)
解析:
计算好对应的数字,按照格式打印就行。
参考代码:
#include <stdio.h> int main() { //输入 int sec = 0; int h = 0;//小时 int m = 0;//分钟 int s = 0;//秒 scanf("%d", &sec); //计算 h = sec/60/60; m = sec/60%60; s = sec%60; //输出 printf("%d %d %d\n", h,m,s); return 0; }
(入门)BC24-总成绩和平均分计算_牛客题霸_牛客网 (nowcoder.com)
解析:
- 本题在接收数据的同时就可以计算分数的总和,不一定非要等数据全部接收完毕。
- 按照格式打印就行。
参考代码:
//代码一 #include <stdio.h> int main() { double score[3] = {0};//三科的成绩 //输入 scanf("%lf %lf %lf", &score[0], &score[1], &score[2]); //计算 double sum = score[0] + score[1] + score[2]; double avg = sum/3.0; //输出 printf("%.2lf %.2lf\n", sum, avg); return 0; }
//代码二 #include <stdio.h> int main() { int i = 0; double sum = 0.0; double score = 0.0; //输入并计算 for(i=0; i<3; i++) { scanf("%lf", &score); sum += score; } printf("%.2lf %.2lf\n", sum, sum/3.0); return 0; }
(简单)BC30-KiKi和酸奶_牛客题霸_牛客网 (nowcoder.com)
解析:
- 注意多组输入。
- 如果 h 分钟喝一瓶酸奶,那么 m 分钟喝汽水的瓶数就是 h/m 瓶,但是如果 m%h 有余数,就说明又打开了一瓶,只是没来得及喝完,那么未打开的就少一瓶。
参考代码:
#include <stdio.h> int main() { int n = 0;//给的酸奶瓶数 int h = 0;//喝一瓶酸奶所用时间 int m = 0;//总共时间 while(scanf("%d %d %d", &n, &h, &m) != EOF) { if(m%h>0) printf("%d\n", n-m/h-1); else printf("%d\n", n-m/h); } return 0; }
(入门)BC31-发布信息_牛客题霸_牛客网 (nowcoder.com)
解析:
直接按照要求输出结果。
参考代码:
#include <stdio.h> int main() { printf("I lost my cellphone!\n"); return 0; }
(入门)BC32-输出学生信息_牛客题霸_牛客网 (nowcoder.com)
解析:
按照题目要求的格式输出即可。
参考代码:
#include <stdio.h> int main() { printf("Name Age Gender\n"); printf("---------------------\n"); printf("Jack 18 man\n"); return 0; }
(入门)BC33-计算平均成绩_牛客题霸_牛客网 (nowcoder.com)
解析:
在获取输入数据的同时,计算成绩总和,然后求出平均值,按照格式输出就行。
参考代码:
//代码一 #include <stdio.h> int main() { //输入 int i = 0; int sum = 0; int input = 0; for(i=0; i<5; i++) { scanf("%d", &input); sum += input; } //输出 printf("%.1lf\n", sum/5.0); return 0; }
//代码二 #include <stdio.h> int main() { int num[5] = {0}; //输入 int i = 0; for(i=0; i<5; i++) { scanf("%d", &num[i]); } //求和 int sum = 0; for(i=0; i<5; i++) { sum += num[i]; } //输出 printf("%.1lf\n", sum/5.0); return 0; }
(简单)BC34-进制A+B_牛客题霸_牛客网 (nowcoder.com)
解析:
- 首先要理解十进制、十六进制、八进制只是一种数据的表示形式,不是数据的存储形式。
- 不同格式的数据的输出在C语言中有不同的格式指定,比如:%x 是十六进制格式,%o 就是八进制格式。
- 不同进制的数据存放在整形变量中都是整形值,直接计算就行,计算交给计算机。
参考代码:
int main() { int a = 0; int b = 0; scanf("%x %o", &a, &b); int sum = a+b; printf("%d\n", sum); return 0; }
(简单)BC37-网购_牛客题霸_牛客网 (nowcoder.com)
解析:
- 理解清楚题目的意思,然后进行计算即可。
- 注意抵扣完后价格小于0的,只能按照0计算。
- 要求按照格式输出。
参考代码:
//代码1 #include <stdio.h> int main() { double price = 0.0;//价格 int month = 0; int day = 0; int flag = 0;//是否有优惠券 double cut = 0;//折扣 //输入 scanf("%lf %d %d %d", &price, &month, &day, &flag); if(month == 11 && day == 11) { price *= 0.7; if(flag == 1) price -= 50; } else if(month == 12 && day == 12) { price *= 0.8; if(flag == 1) price -= 50; } if(price < 0.0) printf("%.2lf\n", 0.0); else printf("%.2lf\n", price); return 0; }
//代码2 #include <stdio.h> int main() { double price = 0.0;//价格 int month = 0; int day = 0; int flag = 0;//是否有优惠券 double cut = 0;//折扣 double last = 0.0;//最后的价格 //输入 scanf("%lf %d %d %d", &price, &m, &d, &flag); if(month == 11 && day == 11) { cut = 0.7; } else if(month==12 && day == 12) { cut = 0.8; } last = price*cut-flag*50.0; if(last < 0.0) printf("%.2lf\n", 0.0); else printf("%.2lf\n", last); return 0; }
(简单)BC39-争夺前五名_牛客题霸_牛客网 (nowcoder.com)
解析:
- 学会使用C语言库函数提供qsort函数。
- 学会自己实现一个简单的整形数组排序代码。
参考代码:
//代码1 #include <stdio.h> #include <stdlib.h> int cmp_int(const void* e1, const void*e2) { return *(int*)e1 - *(int*)e2; } int main() { //输入 int n = 0;//个数 int score[40] = {0};//存放的是成绩 scanf("%d", &n); int i = 0; for(i=0; i<n; i++) { scanf("%d", &score[i]); } //对所有数字排序 //使用库函数排序 qsort(score, n, 4, cmp_int); for(i=0; i<5; i++) { printf("%d ", score[--n]); } return 0; }
//代码2 #include <stdio.h> #include <stdlib.h> int cmp_int(const void* e1, const void*e2) { return *(int*)e1 - *(int*)e2; } int main() { //输入 int n = 0;//个数 int score[40] = {0};//存放的是成绩 scanf("%d", &n); int i = 0; for(i=0; i<n; i++) { scanf("%d", &score[i]); } //排序 - 升序 - 后5个元素 - 就是最高的前5个成绩 //使用库函数排序 qsort(score, n, 4, cmp_int); for(i=n-1; i>n-5; i--) { printf("%d ", score[i]); } return 0; }
//代码3 #include <stdio.h> int main() { //输入 int n = 0;//个数 int score[40] = {0};//存放的是成绩 scanf("%d", &n); int i = 0; for(i=0; i<n; i++) { scanf("%d", &score[i]); } //对所有数字排序-冒泡排序 int j = 0; for(i=0; i<n; i++)//趟数 { //一趟冒泡排序要进行多少对元素的比较 for(j=0; j<n-i-1; j++) { if(score[j] < score[j+1])//降序(由大到小) { int tmp = score[j]; score[j] = score[j+1]; score[j+1] = tmp; } } } for(i=0; i<5; i++) { printf("%d ", score[i]); } return 0; }
//代码4 #include <stdio.h> int main() { //输入 int n = 0;//个数 int score[40] = {0};//存放的是成绩 scanf("%d", &n); int i = 0; for(i=0; i<n; i++) { scanf("%d", &score[i]); } //排序 - 升序 - 后5个元素 - 就是最高的前5个成绩 //对所有数字排序-冒泡排序 for(i=0; i<n-1; i++)//趟数 { //一趟冒泡排序要进行多少对元素的比较 int j = 0; for(j=0; j<n-i-1; j++) { if(score[j] > score[j+1]) { int tmp = score[j]; score[j] = score[j+1]; score[j+1] = tmp; } } } for(i=n-1; i>=n-5; i--) { printf("%d ", score[i]); } return 0; }
(简单)BC40-竞选社长_牛客题霸_牛客网 (nowcoder.com)
解析:
- 这道题有多种解法。
- 主要就是读取输入数据的问题要解决好,输入有2个结束条件(遇到读取结束EOF,或者'0')。
- 剩余的工作就是统计个数后,然后根据情况按照格式进行输出。
参考代码:
//代码1 #include <stdio.h> int main() { char arr[100] = {0}; //输入 gets(arr); //统计 int i = 0; int count_a = 0; int count_b = 0; while(arr[i] != '0') { if(arr[i] == 'A') { count_a ++; } else if(arr[i] == 'B') { count_b ++; } i++; } if(count_a > count_b) printf("A"); else if(count_a < count_b) printf("B"); else printf("E"); return 0; }
//代码2 #include <stdio.h> int main() { char arr[100] = {0}; //输入 gets(arr); //统计 int i = 0; int flag = 0; while(arr[i] != '0') { if(arr[i] == 'A') { flag++; } else if(arr[i] == 'B') { flag--; } i++; } //输出 if(flag>0) printf("A"); else if(flag<0) printf("B"); else printf("E"); return 0; }
//代码3 #include <stdio.h> int main() { //输入并统计 char arr[100] = {0}; int ch = 0; int flag = 0; //如果getchar获取了 while(((ch=getchar()) != '0') && ch != EOF) { if(ch == 'A') { flag++; } else if(ch == 'B') { flag--; } } if(flag>0) printf("A"); else if(flag<0) printf("B"); else printf("E"); return 0; }