吉林大学超星学习通04
03好容易,不發了。總結一下04,跑步進入了指針,現在感覺前路有點迷茫。考慮是不是要去藍橋杯挑戰一下自己雖然現在還是菜雞,希望以此激勵我不斷前進......回頭看自己的代碼好羞恥啊干,感覺很多可以改一改但是最近超忙所以算了吧。僅作留檔以便將來鞭尸我自己。
九成新新手,開打兩月。若有錯誤,拜托指正,非常感謝!
因為用的是vs所以有scanf_s......準備開始嘗試dev-c++。
1.?(程序題)
題目編號:Exp04-Basic01,GJBook3例-06-13
題目名稱:括號匹配
題目描述:編寫程序,從終端讀入以‘@’為結束符的字符序列,檢查該字符序列中的 ( 與 )、 [ 與 ] 、{ 與 } 是否匹配(個數相等且位置不相交)。
輸入:包含一串以‘@’為結束符的字符串,其間可能包含空白或其它非括號字符。
輸出:如果字符串中三類括號匹配,則輸出YES;否則輸出NO。
?
樣例1:
輸入:
{a,a}b{c[cc]c}??{a(bb[cc]dd)a}@ 輸出: YES樣例2:
輸入: {a,a}b{c[cc]c]?{a(bb[cc]dd)a}@ 輸出: NO #include<stdio.h>int main(){int i, j=1,n=1;char m[256], q=0;//m[]當作棧m[0] = 0;for (;q != '@'; ) {scanf_s("%c", &q,1);if (q == '('|| q == '{'|| q == '[') {m[n] = q;n++;}if (q == ')') {if (m[n - 1] == '(') {m[n - 1] = 0;n--;}else j = 0;}if (q == ']') {if (m[n - 1] == '[') {m[n - 1] = 0;n--;}else j = 0;}if (q == '}') {if (m[n - 1] == '{') {m[n - 1] = 0;n--;}else j = 0;}}if (j == 1&&n==1) printf("YES");else printf("NO");return 0;}這題參考了大佬的代碼,看了之后開始跑步搞完數組。多看別人的代碼,去接觸一下些老師不講的東西,對我打代碼的一些意識(?)有了模糊的感覺。
2.?(程序題)
題目編號:Exp04-Basic02
題目名稱:n倍數關系
題目描述:
給定若干不完全相同的正整數(<10000)和n(n<5),計算這些正整數里面有多少數對滿足:其中一個是另一個的n倍。例如:1 4 3 2 9 7 18 22,n=3時得到的答案是2;因為3是1的3倍,9是3的3倍。
輸入:輸入第一行給出正整數n的值,接下來包括多組測試數據。每組數據最多100個整數占用一行,以數字0結束(不計入100個整數里)。測試數據不超過20組,最后一行只包括-1,表示輸入數據結束。
輸出:對每組輸入數據,輸出一行,給出有多少數對滿足其中一個是另一個n倍。(注:最后一行末尾無換行符等多余字符。)
?
樣例:
輸入: 2 1?4?3?2?9?7?18?22?0 2?4?8?10?0 7?5?11?13?1?3?0 -1 輸出: 3 2 0 #include<stdio.h>int a[20][101];int lyl(int j1, int n) {int i = 0,t=0,x=0;for (; i <= 100; i++) {if (a[j1][i] == 0) continue;for (x = i+1; x <= 100; x++) {if (a[j1][i] == n * a[j1][x] || a[j1][x] == n * a[j1][i])t++;}}return t;}int main(){int n,i=0,j=0;int t=0,j1=0,i1=0;scanf_s("%d", &n);for (; j <= 19 ; j++) {for (i=0; i <= 100 ; i++) {scanf_s("%d", &a[j][i]);if (a[j][i] == 0) break;if (a[j][i] == -1) break;}if (a[j][i] == -1) break;}for (; j1 <= j - 1; j1++) {t = lyl(j1, n);printf("%d", t);if (j1 != j - 1) printf("\n");}return 0;}3.?(程序題)
題目編號:? Exp04-Basic03
題目名稱:? 數組排序
題目描述:? 編寫函數,分別采用教材給出的“主元選擇排序”、“冒泡排序”和“逐步增加遞增子序列”排序方法對給定數組進行排序。綜合運用調試方法,觀察不同排序方法在排序過程中數組元素值的變化情況,如觀察遞增排序如下序列{9、8、7、6、5、4、3、2、1、0},{0、1、2、3、4、5、6、7、8、9}和{2、9、4、7、6、5、8、3、0、1}時,數組中元素比較次數、移動或交換次數。
說明:
(1)對于“主元選擇排序”和“冒泡排序”,執行完3個賦值操作,計為1次交換。
(2)對于“逐步增加遞增子序列”排序,每執行一次while循環的循環條件判斷,計為1次比較;如果在某輪比較中元素本身的位置沒有變化,則本輪移動次數為0。
(3)因本題目的是觀察輸出數據,深入理解排序算法;所以樣例點和實測點一致。
輸入:包含10個整數的待排序數組。
輸出:在一行內依次輸出,遞增排序時,主元排序比較次數 和 移動/交換次數、冒泡排序比較次數 和 移動/交換次數和遞增子序列排序比較次數 和 移動/交換次數,相鄰數字之間以一個西文空格間隔。
樣例1:
輸入: 9?8?7?6?5?4?3?2?1?0 輸出: 45?9?90?45?54?54樣例2:
輸入: 0?1?2?3?4?5?6?7?8?9 輸出: 45?9?9?0?9?0樣例3:
輸入: 2?2?3?3?5?5?4?4?6?6 輸出: 45?9?27?4?13?6樣例4:
輸入: 1?0?3?2?5?4?7?6?9?8 輸出: 45?9?18?5?14?10樣例5:
輸入: 1?2?3?4?5?5?4?3?2?1 輸出: 45?9?81?20?29?24 //學習通04 3 數組排列#include<stdio.h>int a[10],a3[10],a2[10];int main(){int i, i1, m=0, n=0,a1,j=0;//a1中間值 m比較次數 n交換次數for (i = 0; i <= 9; i++) {scanf_s("%d", &a[i]);a3[i] = a[i];a2[i] = a[i];}//主元for (i = 0; i <= 9; i++) {for (i = 0; i < 9; i++) {j = i;for (i1 = i + 1; i1 <= 9; i1++) {if (a[i1] < a[j]) {j = i1;}a1 = a[i];a[i] = a[j];a[j] = a1;m++;}n++;}}printf("%d %d", m, n);m = 0;n = 0;//冒泡//int i, i1, m=0, n=0,a1,j=0;int x = 1;while (x == 1) {x = 0;for (i = 0; i < 9; i++) {if (a2[i] > a2[i + 1]) {a1 = a2[i+1];a2[i + 1] = a2[i];a2[i] = a1;n=n+1;x = 1;}m++;}}printf(" %d %d", m, n);m = 0;n = 0;//for (i = 0; i <= 9; i++) printf("\n%d", a[i]);//插入排序 計數需另算//int i, i1, m=0, n=0,a1,j=0;int y = 0;for (i = 1; i < 10; i++) {for (j = i - 1; j >= 0 && a3[j] > a3[i]; j--)m++;a1 = a3[i];for (y = i; y > j+1; y--) {a3[y] = a3[y - 1];n++;}if (j != i - 1) {a3[j + 1] = a1;n++;}}m = m + 9;printf(" %d %d", m, n);return 0;}這題最后一個拖了很久。
4.?(程序題)
題目編號:Exp04-Basic04,GJBook3-06-19
題目名稱:刪除重復元素
題目描述:編寫函數,不使用其他輔助數組,把整型數組中重復元素刪得只剩一個;所有未被刪除元素都保留最先順序移動到數組前面。
輸入:第一行輸入數組長度n(≤100),第二行依次從鍵盤隨機輸入n個整數作為數組元素值。
輸出:已刪除重復元素的數組,各元素間以一個西文空格間隔,最后一個元素后無字符。
樣例1:
輸入: 10 1?1?2?3?3?3?2?1?2?4 輸出: 1?2?3?4樣例2:
輸入: 10 1?0?2?2?2?2?2?2?2?2 輸出: 1?0?2 #include<stdio.h>int main() {int a[100], i = 0, n,j=0,t=1;scanf_s("%d", &n);for (; i <= n - 1; i++) {scanf_s("%d", &a[i]);}for (i = 0; i <= n - 1; i++) {for (j = 0; j < i; j++) {if (a[i] == a[j]) {a[i] = 0;break;}if (j == i - 1) {a[t] = a[i];printf(" %d", a[t]);t++;}}if (i == 0) printf("%d", a[0]);}return 0;}//16 mins記不清了,但是中間很多題都是重樣的,很容易,現在這個拖太久了我全忘了......05也蠻簡單。
5.?(程序題)
題目編號:Exp04-Basic05,GJBook3-06-06
題目名稱:轉移0元素
題目描述:編寫程序,不使用其他輔助數組,把給定整型數組中所有0元素全部移到后面,且所有非0元素的順序不變。
?
輸入:第一行輸入數組長度n(≤100),第二行依次從鍵盤隨機輸入n個整數作為數組元素值。
輸出:已將所有0元素串到后面的整數數組,各元素間以一個西文空格間隔,最后一個元素后無字符。
?
樣例1:
輸入: 10 0?3?1?0?0?0?1?2?3?0 輸出: 3?1?1?2?3?0?0?0?0?0樣例2:
輸入: 10 0?0?0?0?0?0?1?2?3?4 輸出: 1?2?3?4?0?0?0?0?0?0 #include<stdio.h>int main(){int n, a[100], i = 0, j = 0,t=0;scanf_s("%d", &n);for (; i <= n - 1; i++) {scanf_s("%d", &a[i]);if (a[i] != 0) {a[t] = a[i];if (t != i) a[i] =0;t++;}}for (i = 0; i <= n - 1; i++) {printf("%d", a[i]);if (i != n - 1) printf(" ");}return 0;}6.?(程序題)
題目編號 :Exp04-Basic06,GJBook3-06-04
題目名稱:循環右移
題目描述:編寫程序,不使用其它輔助數組,把一維整型數組中的各個元素循環右移j位。
輸入:
第一行輸入兩個整數,n表示數組長度(0<n<=100),j表示循環右移的位數(j>=0);
第二行依次從鍵盤隨機輸入n個整數作為數組元素值。
輸出:
循環右移后的整數數組,各元素間以一個西文空格間隔,最后一個元素后無字符。
樣例1:
輸入: 10?2 1?2?3?4?5?6?7?8?9?0 輸出: 9?0?1?2?3?4?5?6?7?8樣例2:
輸入: 10?23 1?2?3?4?5?6?7?8?9?0 輸出: 8?9?0?1?2?3?4?5?6?7 #include<stdio.h>int main(){int a[100], b, c, j,n;scanf_s("%d%d", &n,&j);//數組長度 右移位數for (b = 0; b <= n-1; b++) {scanf_s("%d", &(a[b]));}if (j >= n) j = j % n;for (b = n - j; b <= n - 1; b++) {printf("%d", a[b]);printf(" ");}for (b = 0; b < n - j; b++) {printf("%d", a[b]);if (b != n - j - 1) printf(" ");}return 0;}發現學長的博客了,怎么學長那么早就開始棧了(癡呆),在循壞就有了(吧,我記的),路漫漫其修遠兮,還有很遠。
7.?(程序題)
題目編號:Exp04-Basic07,GJBook3-06-01
題目名稱:檢驗矩陣重復元素
題目描述:編寫程序判斷任意給定n*n的兩維整型數組中是否有相同元素。
?
輸入:第一行輸入數組行數n(≤10),第二行隨機輸入n*n個整數作為數組元素值。
輸出:如果數組中有相同元素,則輸出YES;否則,輸出NO。
?
樣例1:
輸入: 3 1?2?3?4?5?6?7?8?9 輸出: NO樣例2:
輸入: 3 1?1?2?3?4?5?6?7?8 輸出: YES #include<stdio.h>int a[10][10];int main() {int n, i = 0, j = 0,j1=0,i1=0,t=0;scanf_s("%d", &n);for (j = 0; j <= n-1; j++) {for (i = 0; i <= n - 1; i++)scanf_s("%d", &a[j][i]);}for (j = 0; j <= n - 1; j++) {for (i = 0; i <= n - 1; i++) {for (j1 = j; j1 <= n - 1; j1++) {for (i1 = i+1; i1 <= n - 1; i1++) {if (a[j1][i1] == a[j][i] )t = 1;}}}}if (t == 0) printf("NO");else printf("YES");return 0;}8.?(程序題)
題目編號: Exp04-Basic08,GJBook3-06-03
題目名稱:?矩陣轉置
問題描述: 編寫程序,將任意給定n*n的兩維整型數組轉置。
輸入:第一行輸入數組行數n(≤10),第二行隨機輸入n*n個整數作為數組元素值。
輸出:按先行后列、從左至右的順序輸出轉置后數組內的所有元素,每行n個元素,同一行內的各元素間以一個西文空格間隔;每行最后一個元素除必要的回車換行符外無其它字符。
樣例1:
輸入: 3 1?2?3 1?2?3 1?2?3 輸出: 1?1?1 2?2?2 3?3?3樣例2:
輸入: 3 1?1?1 2?2?2 3?3?3 輸出: 1?2?3 1?2?3 1?2?3 #include<stdio.h>int a[10][10];int main() {int n, i = 0, j = 0,j1=0,i1=0,t=0;scanf_s("%d", &n);for (j = 0; j <= n-1; j++) {for (i = 0; i <= n - 1; i++)scanf_s("%d", &a[j][i]);}for (i = 0; i <= n - 1; i++) {for (j = 0; j <= n - 1; j++) {printf("%d", a[j][i]);if (j != n - 1) printf(" ");else printf("\n");}}return 0;}9.?(程序題)
題目編號:Exp04-Basic09,GJBook3-06-02
題目名稱:檢驗矩陣主對角線對稱
題目描述:編寫程序,判斷任意給定n*n的兩維整型數組是否關于主對角線對稱。
?
輸入:第一行輸入數組行數n(≤10),第二行隨機輸入n*n個整數作為數組元素值。
輸出:如果數組關于主對角線對稱,則輸出YES;否則輸出NO。
樣例1:
輸入:
3 1?2?3 2?1?2 3?2?1 輸出: YES樣例2:
輸入:
3 0?0?1 2?1?2 3?2?1 輸出: NO #include<stdio.h>int a[10][10];int main() {int n, i = 0, j = 0,j1=0,i1=0,t=0;scanf_s("%d", &n);for (j = 0; j <= n-1; j++) {for (i = 0; i <= n - 1; i++)scanf_s("%d", &a[j][i]);}for (i = 0; i <= n - 1; i++) {for (j = 0; j <= n - 1; j++) {if (a[j][i] != a[i][j]) t = 1;}}if (t == 1) printf("NO");else printf("YES");return 0;}10.?(程序題)
題目編號:Exp04-Basic10,GJBook3-06-12
題目名稱:字符串反序
問題描述:編寫程序,將給定的字符串反序輸出。
輸入:一個長度不超過255的字符串,字符串中可能含有空白字符。
輸出:反序輸出的字符串。
樣例1:
輸入 A? ? ? ? ? ??輸出 A
樣例2:
輸入 123 45??? 輸出? 54 321
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>void lyl(char a1[256]) {int t, i;char a2[256];strcpy(a2, a1);t = strlen(a1);for (i = t - 1; i >= 0; i--)a1[i] = a2[t - 1 - i];}int main() {char a[256], i = 0; gets(a);//scanf_s("%s", &a,256);lyl(a);printf("%s", a);return 0;}大概就是以上幾題差不多了。以下的還是花了一點時間的,上面的幾個一口氣拿一個模板打完的(原諒我的表達混亂)。
11.?(程序題)
題目編號:Exp04-Enhance01,GJBook3-06-25
題目名稱:規則形式構建集合
題目描述:
設整數集合 M 定義如下:
(1) 1∈M ;
(2) 若 x ∈M , 則 2x+1 ∈M , 3x+1 ∈M ;
(3) 沒有別的整數屬于集合 M 。
編程序按遞增順序生成并輸出集合 M 的前n項
輸入:一個正整數n(≤300)。
輸出:按遞增序列輸出n個屬于集合M的整數,各數間以一個西文空格間隔;最后一個數后無字符。
樣例1:
輸入:10 輸出:1?3?4?7?9?10?13?15?19?21樣例2:
輸入:1 輸出:1 #include<stdio.h>int a[400];void lyl(int i) {//插入int i1 = 1, t = 0, k = 0, j = 0;j = i - 1;while (a[j] > a[i]) j--;t = a[i];for (k = i - 1; k > j; k--) a[k + 1] = a[k];a[j + 1] = t;}void check(int n) {//檢查重復int i = 0, i1 = 0;for (; i <= n+100; i++) {if (a[i + 1] == a[i]) {for (i1 = i + 1; i1 < n + 100; i1++)a[i1] = a[i1 + 1];}}}int main() {int i = 0, x = 1, t = 0;int n;scanf_s("%d", &n);a[i] = 1;while (t < n+100) {a[t+1] = 2 * a[i] + 1;a[t+2] = 3 * a[i] + 1;lyl(t+1);lyl(t+2);i++;t += 2;}check(n);for (i = 0; i < n; i++) {if (i != 0) printf(" ");printf("%d", a[i]);}}12.?(程序題)
題目編號 :Exp04-Enhance02,GJBook3-06-26
題目名稱:約瑟夫問題(Josephus)
題目描述:
古代某法官要判決 n 個犯人死刑, 他有一條荒唐的邏輯, 將犯人首尾相接排成圓圈,所有計數從1開始; 然后從第 s 個人開始數, 每數到第 m 個犯人,則拉出來處決; 然后再數 m 個,數到的犯人再處決;... ; 但剩下的最后一個犯人可以赦免。編程序,給出處決順序,并告知哪一個人活下來。
輸入:三個正整數 n(≤1000),s和m,都可以使用int類型變量表示。
輸出:依次輸出被處決人員的編號,每個編號之間用一個西文空格間隔,最后一個編號后無字符。
?
樣例:
輸入:6?1?5 輸出:5?4?6?2?3?1 #include<stdio.h>int a[1010];int table( int m,int n,int w) {int ma, i;for (i = 1;i <= m ; i ++) {while (!a[w]) {if (w == n + 1) w = 0;w++;}if (i == m) {a[w] = 0;break;}w++;if (w == n + 1) w = 0;}return w;}int main() {int n, s, m, w = 0, w1 = 0;int p = 0, i = 0;int mark = 0;scanf_s("%d%d%d", &n, &s, &m);for (i = 1; i <= n; i++) {a[i] = 1;}w = s;while (p != n ) {w1=table( m,n,w);printf("%d", w1);if (p != n - 1) printf(" ");w = w1 + 1;p++;}}13.?(程序題)
題目編號 :Exp04-Enhance03,freshman-1006
題目名稱:英文翻譯自然數
題目描述:按常規英文輸出1000以內自然數的英文讀法。
?
輸入:每個測試輸入包含 1 個測試用例,給出正整數 n(0<= n <1000)
輸出:輸出占一行:如果 0<= n?<1000, 用規定的格式輸出?n,所有英文單詞小寫,最后一個單詞后無字符;否則輸出ERR。
樣例:
輸入:123 輸出:one?hundred?and?twenty-three #include <stdio.h>char data_1[20][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten","eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };char data_2[9][8] = {"ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };int a[3];int main(void) {int n, i = 0, n1, t = 0;scanf_s("%d", &n);n1 = n;for (i=0; n1 != 0; i++) {a[i] = n1 % 10;n1 /= 10;t++;}if (n < 0 || n >= 1000) printf("ERR");else {switch (t) {case 0:case 1:printf("%s", data_1[n]); break;case 2:if (a[1] == 1) printf("%s", data_1[n]);else {printf("%s", data_2[a[1] - 1]);if (a[0] != 0) printf("-%s", data_1[a[0]]);}break;case 3:n1 = n % 100;printf("%s hundred", data_1[a[2]]);if (a[0] != 0 || a[1] != 0) printf(" and ");if (a[1] != 0 && a[0] == 0) printf("%s", data_2[a[1] - 1]);if (a[0] != 0) {if (a[1] != 1 && a[1] != 0)printf("%s-%s", data_2[a[1] - 1], data_1[a[0]]);elseprintf("%s", data_1[n1]);}break;}}return 0;}英語苦手......誰懂,為了一個ninety改了一晚上找不到這組數據到底錯哪了......還有一定要多測,我為了找這組錯把所有英文輸出了然后發現了其中的和ninety無關的巨大錯誤(跪)。
原來說要打注釋的但是忘了......從今天開始我就開始!!!!
總結
以上是生活随笔為你收集整理的吉林大学超星学习通04的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DB2常用傻瓜问题1000问(之一)
- 下一篇: 多线程的那群“象”