引言
? ? ? ? 針對初學者,每日練習幾個題,快速上手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/4c49a3a1559141f7a080a48c98cca4cb?tpId=107&&tqId=33411&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking參考代碼:
#include <stdio.h>
int main() {int arr[101] = {0};int n = 0;scanf("%d", &n);int i = 0;for (i = 0; i < n; i++) {int m = 0;scanf("%d", &m);arr[m]++;}int x = 0;
scanf("%d", &x);
printf("%d", arr[x]);
return 0;
}
解析:因為n最大是100,所以可以用數組下標對應的位置來代表對應的值,
????????當有這個值的時候,對應的位置上加1即可
? ? ? ? 最后輸出x位置對應的值,就是x值出現的次數。
2.KiKi學程序設計基礎?
? ? ? ? 點進去直接做題:KiKi學程序設計基礎_牛客題霸_牛客網 (nowcoder.com)https://www.nowcoder.com/practice/07e75d2b212b4a11b1525863ca3af02c?tpId=107&&tqId=33412&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking參考代碼:
#include <stdio.h>
int main() {
//難點:要讓轉義字符不是轉義字符printf("printf(\"Hello world!\\n\");\n");printf("cout << \"Hello world!\" << endl;");return 0;
}
?解析:\n是換行符,\ \n第一個\把\n轉義了,所以就可以正常輸出\n了。
3.KiKi求質數個數
? ? ? ? 點進去直接做題:KiKi求質數個數_牛客題霸_牛客網 (nowcoder.com)https://www.nowcoder.com/practice/d3a404ee0f8d41f98bf4707035d91086?tpId=107&&tqId=33416&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking參考代碼:
#include <stdio.h>
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 count = 0;int i = 0;for (i = 100; i <= 999; i++) {
//判斷i是否為質數if (is_prime(i)) {count++;}}printf("%d\n", count);return 0;
}
?解析:前面幾天做過,自己看代碼就行。
4.KiKi去重整數并排序
? ? ? ? 點進去直接做題:KiKi去重整數并排序_牛客題霸_牛客網 (nowcoder.com)https://www.nowcoder.com/practice/f59b914172b94c69a2b29ad0a1d9b1a7?tpId=107&&tqId=33417&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking參考代碼:
//方法1
#include <stdio.h>
int main() {int n = 0;int arr[100];scanf("%d", &n);int i = 0;for (i = 0; i < n; i++) {scanf("%d", &arr[i]);}
//排序for (i = 0; i < n - 1; i++) {int j = 0;for (j = 0; j < n - 1 - i; j++) {if (arr[j] > arr[j + 1]) {int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
//去重-比較n-1對int j = 0;for (i = 0; i < n - 1; i++) {
//把i+1后邊的元素往前移動if (arr[i] == arr[i + 1]) {int k = 0;for (k = i; k < n - 1; k++) {arr[k] = arr[k + 1];}n--;i--;}}
//打印for (i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;
}//方法2:
int main() {int n = 0;int arr[1001] = {0};scanf("%d", &n);int i = 0 ;int m = 0;for (i = 0; i < n; i++) {scanf("%d", &m);arr[m] = m;}for (i = 0; i < 1001; i++) {if (arr[i] != 0)printf("%d ", arr[i]);}return 0;
}
?解析:昨天做過,昨天用的是方法二,這里給出一個方法一。
附加:5.KiKi學結構體和指針?(看不懂沒關系,這是數據結構部分的內容)
? ? ? ? 點進去直接做題:KiKi學結構體和指針_牛客題霸_牛客網 (nowcoder.com)https://www.nowcoder.com/practice/0ab593ca56b1476eb05b1ff848fd7fcc?tpId=107&&tqId=33419&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking參考代碼:
#include <stdio.h>
#include <stdlib.h>
struct Node {int data;struct Node* next;
};
int main() {int n = 0;struct Node* list = NULL;struct Node* tail = NULL;//輸入結點int i = 0;scanf("%d", &n);for (i = 0; i < n; i++) {int data = 0;scanf("%d", &data);struct Node* n = (struct Node*)malloc(sizeof(struct Node)); //開辟空間n->data = data;n->next = NULL;if (list == NULL) {list = n;tail = list;} else {tail->next = n;tail = tail->next;}}//刪除結點int del = 0;scanf("%d", &del);struct Node* cur = list;struct Node* prev = NULL;while (cur) {//找到了if (cur->data == del) {struct Node* pd = cur;//如果刪除的是第一個結點if (cur == list) {list = list->next;cur = list;} else {//刪除的不是第一個結點prev->next = cur->next;cur = prev->next;}n--;free(pd);} else { //找不到prev = cur;cur = cur->next;}}cur = list;printf("%d\n", n);while (cur) {printf("%d ", cur->data);cur = cur->next;}//釋放空間cur = list;while (cur) {del = cur;cur = cur->next;free(del);}return 0;
}
解析:看不懂沒關系,當你學到數據結構單鏈表的時候,可以回過頭來看這道題,就非常簡單了。
感受:
????????從第一天到現在已經做了120道左右的題了,相信你的寫代碼能力一定有了極大的提升,一起加油吧!
? ????????若您是直接看到這篇博文,可以訂閱一下這個專輯,每日一練,快速提升