# c語言解題研究社-張宇辰 ## [1加n的計算式](https://onlinegdb.com/y1WUREoxZ) :::success ```#include <stdio.h> int main() { int i, sum = 0, n; printf("要加到多少\n"); scanf("%i",&n); for ( i = 0; i <= n; i++){ sum = sum + i; } printf("%i",sum); } ``` ::: ## [判斷三條線段是否可圍成一個三角形](https://onlinegdb.com/yUJ8Tr_yD) ::: success ```#include <stdio.h> int main(){ int x = 6; int y = 12; int z = 6; if( x + y > z && x + z > y && y + z > x ){ printf("可圍成三角形"); } else { printf("不可圍成三角形"); } } ``` ::: ## [如何判斷一個給定的數字是偶數還是奇數?](https://onlinegdb.com/wFljnJWVFy) ::: success ```#include <stdio.h> int main() { int x = 11; if ( x % 2 == 0 ){ printf("是偶數"); }//else { //printf("不是偶數") // } if ( x % 2 != 0 ){ printf("不是偶數"); } } ``` ::: ## [直角 銳角 鈍角 三角形](https://onlinegdb.com/ju3RapKSd) :::success ```#include <stdio.h> int main() { int a = 5,b = 4,c = 3, temp; if ( a > b ){ temp = a; a = b; b = temp; } if ( b > c ){ temp = b; b = c; c = temp; } if (a * a + b * b == c * c ){ printf("可圍成直角三角形"); } if (a * a + b * b > c * c ){ printf("可圍成銳角三角形"); } if (a * a + b * b < c * c ){ printf("可圍成鈍角三角形"); } } ``` ::: ## [1加到10的總和](https://onlinegdb.com/PfXJQt3Y7) ::: success ```#include <stdio.h> int main() { int i = 1, sum = 0; while( i <= 10){ sum = sum + i; printf("%i\n", sum); i = i + 1; } } ``` ::: ## [質數 合數判斷](https://onlinegdb.com/XSW_Lj-xd) ::: success ```#include <stdio.h> int main() { int n , i = 2, is_prime = 1; scanf("%i" , &n); while (i < n){ if( n % i == 0){ is_prime = 0; printf ("%i\n" , i); } i++; } if (is_prime ==0){ printf("是合數"); } else printf("是質數"); } ``` ::: ## [兩光法師占卜術](https://onlinegdb.com/q0mdBEylS) ::: success ```#include <stdio.h> int main() { int D = 26 ,M = 9 ,S = (M * 2 + D) % 3 ; switch (S) { case 0: printf("普通"); break; case 1: printf("吉"); break; case 2: printf("大吉"); break; } } ``` ::: ## [最大公因數 最小公倍數 輾轉相除法](https://onlinegdb.com/c36Ul7A7-) ::: success ```#include <stdio.h> int main() { int num1, num2, remainder,product,LCM;//定義變數,remainder是餘數,product是積,LCM是最小公倍數 printf("請輸入兩個數\n");//提示語句 scanf ("%i\n%i",&num1,&num2//鍵盤輸入兩個數 product = num1 * num2; while ( num2 != 0 ){//餘數不為0 繼續相除 直到餘數為0 remainder = num1 % num2; num1 = num2; num2 = remainder; } printf("最大公因數%i\n",num1);//輸出最大公因數 LCM = product / num1; printf("最小公倍數%i",LCM);//輸出最小公倍數 } ``` ::: ## [平年閏年判斷](https://onlinegdb.com/lUvBu4cF2) ::: success ```#include <stdio.h>//閏年的規則 每四年閏一次 但是每一百年不閏 遇到四百年還是要閏 int main() { int year; printf ("請輸入一個數"); scanf ("%i",&year); if (year % 400 == 0){//除以400f (year % 400 == 0){//除以400餘數為0 則為閏年 printf("閏年"); } else if (year % 100 == 0){//再除以100的餘數為0 則為平年 printf("平年"); } else if (year % 4 == 0){//再除以4的餘數為0 則為閏年 printf("閏年"); } else { printf("平年");//餘數平年 } } ``` ::: ## [最大公因數 最小公倍數 非輾轉相除法](https://onlinegdb.com/fZt6KQsCy) ::: success ```#include <stdio.h> int main() { int num1 = 10, num2 = 34, num2_old,LCM;//num2_old 沒有改變的num2 num2_old = num2; while ( num2 != 1)//num2會一直減少直到 1 { if ( num1 % num2 == 0 & num2_old % num2 == 0){//num1被num2整除或原始的num2_old被num2整除代表此時的num2為最大公因數 printf("%i\n",num2); LCM=(num1*num2_old)/num2; printf ("%i",LCM);//最大公因數為lCM break; } num2 = num2 -1; } } ``` ::: ## [陣列](https://onlinegdb.com/2lj-qxKDd) ::: success ```#include <stdio.h> int main() { int myNumbers[4]; for(int j = 0; j < 4; j++){ scanf("%i",&myNumbers[j]); } myNumbers[1] = 33; for(int i = 0; i < 4; i ++ ){ printf("%i\n",myNumbers[i]); } } ``` ::: ## [費波那契數列-非陣列解法](https://onlinegdb.com/E_hgb2t7y) ::: success ```#include <stdio.h> int main() { int n1 = 1, n2 = 1, answer, i, n; printf("請問要查費波那契數列的第幾項\n"); scanf("%i", &n ); //printf("%i %i ",n1,n2); for (i = 3; i <= n; i++){ answer = n1 + n2; n1 = n2; n2 = answer; } printf("%i ", answer ); } ``` ::: ## [泡沫排序法](https://onlinegdb.com/Cfcxa8mIT) ::: success ```#include <stdio.h> int main() { int n[9] ;//= { 9, 8, 7, 6, 5, 4, 3, 2, 1,}; int i, j, temp; for (i = 0; i < 9; i++){ scanf("%i",&n[i]); } for ( j = 0; j < 9-1; j++){ for ( i = 0; i < 9-1-j; i++){ if ( n[i] > n [i+1]){ temp = n[i]; n[i] = n[i+1]; n[i+1] = temp; } } } for (i = 0; i < 9; i++){ printf("%i ",n[i]); } } ``` ::: ## [sagit's計分程式](https://onlinegdb.com/i5oQkAfXb) ::: success ```#include <stdio.h> int main() { int n = 40,grade; while(scanf("%i",&n)!=EOF) { if( n >= 0 & n <= 10 ){ grade = n * 6; } else if( n >= 10 & n <= 20){ grade = (n-10) * 2 + 60; } else if( n >= 20 & n <= 40){ grade = (n-20) + 80; } else { grade = 100; } printf("%i\n",grade); } } ``` ::: ## [費波那契數列-陣列解法](https://onlinegdb.com/Fsnz065Yj) ::: success ```#include <stdio.h> int main() { int n , i ,fib[100]; fib[0] = 1; fib[1] = 1; printf("請問要查費波那契數列的第幾項?\n"); while (scanf("%i",&n)!= EOF){ for ( i = 2; i < n; i++){ fib[i] = fib[i-2]+fib[i-1]; } printf("費波那契數列的第%i項是%i\n",n,fib[n-1]); printf("\n請問要查費波那契數列的第幾項?\n"); } } ``` ::: ## [終極密碼](https://onlinegdb.com/MVjsWRO75X) ::: success ```#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int x, input, min = 0, max = 100; srand(time(0)); x = rand()%99+1;//設x 為亂數,範圍1-99 printf("請輸入一個介於1到100間的數字\n"); while( input != x ){ scanf("%i",&input); if(input == x) //直接猜中 break; //else if (x == min + 1 && x == max - 1)可省略 //break;//出現 如 23 < x < 25可省略 else if (input > x){ max = input; printf("%i < x < %i再少一點\n",min,max); } else { min = input; printf("%i < x < %i再多一點\n",min,max); } } printf("%i < x < %i恭喜你,猜中了\n",min,max); printf("正確答案為%i",x); } ``` ::: ## [等差數列](https://onlinegdb.com/U6AdNKULS) ::: success ```#include <stdio.h> int main() { int a[100]; printf("等差數列首項是多少?\n"); scanf ("%i" ,&a[0]); int d, i, n, sum = 0; printf("等差數列的公差是多少?\n"); scanf("%i",&d); printf("你要查詢數列的哪一項?\n"); scanf("%i",&n); for (i = 0; i < n; i++){ a[i+1] = a[i] + d; sum = sum + a[i] ; } printf("答案是%i\n和是%i",a[n-1],sum); } ``` ::: ## [幾A幾B猜數字](https://onlinegdb.com/gFRlRfa9r) ::: success ```{ int answer, input , a, b, c, x, y, z; do{ srand(time(0)); answer = rand()%899+100; a = answer / 100; b = answer / 10 % 10; c = answer % 10; } while(a == b || a == c || b == c); printf("%i",answer);//檢查產生的亂數是否有問題 printf("請輸入數字\n"); while(scanf("%i",&input) != EOF){ int A = 0, B = 0; x = input / 100; y = input / 10 % 10; z = input % 10; if(a == x && b == y && c == z){ printf("猜對了!"); break; } if(z == c) A++; if(y == b) A++; if(x == a) A++; if(z == a || z == b) B++; if(y == a || y == c) B++; if(x == b || x == c) B++; printf("%iA%iB\n",A,B); } } ``` ::: ## [函式](https://onlinegdb.com/VgXmcKKSW) ::: success ```#include <stdio.h> int leap_year(int); int main(){ int year; while(scanf("%i",&year) != EOF){ printf("%i\n",leap_year(year)); } } int leap_year(int y){ int is_laep; is_laep = (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0); return is_laep; } ``` ::: ## [四個數字,能組成多少互不相同的無重複三位數字?](https://onlinegdb.com/G1j_6vanG) ::: success ```//可填在百位 十位 個位的數字都是1 2 3 4 組成所有的排列後再去調不滿條件的排列 #include <stdio.h> int main() { int i ,j ,k ,count; for ( i = 1; i < 5; i++){ for ( j = 1; j < 5; j++){ for ( k = 1; k < 5; k++){ if ( i != j && i != k && j != k){ printf("%i%i%i\n",i,j,k); count++; } } } } printf("總共有%i個",count); } ``` ::: ## [面積計算 無回傳](https://onlinegdb.com/yTCsSfrac) :::success ```#include <stdio.h> int square(int x); int main(){ int len; scanf("%i", &len); printf("%i",square(len)); return 0; } int square(int x){ return x * x; } ``` ::: ## [面積計算 有回傳](https://onlinegdb.com/jNQQ-h5pk) ::: success ``` #include <stdio.h> void f(int x); int main(){ f(4); f(5); return 0; } void f(int x){ printf("%i\n", x * x); return ; } ``` ::: ## [河內塔 數字版](https://onlinegdb.com/r36aa6R2g) ::: success ```#include <stdio.h> void hanoi(int n, int A, int B, int C){ if (n == 1){ printf("%i -> %i\n",A ,C); } else{ hanoi(n-1,A, C, B); printf("%i -> %i\n",A ,C); hanoi(n-1,B, A, C); } } int main() { //int n = 3, A = 1, B = 2, C = 3; int n, A = 1, B = 2, C = 3; printf("請輸入盤子數量"); scanf("%i",&n); hanoi(n, A, B, C); } ``` ::: ## [河內塔 字元方式顯示](https://onlinegdb.com/5J-0O0ScM) ::: success ```#include <stdio.h> void hanoi(int n, char A, char B, char C){ if (n == 1){ printf("%c -> %c\n",A ,C); } else{ hanoi(n-1,A, C, B); printf("%c -> %c\n",A ,C); hanoi(n-1,B, A, C); } } int main() { int n; char A = 'A', B = 'B', C = 'C'; printf("請輸入n:"); scanf("%i",&n); hanoi(n, A, B, C); return 0; } ``` ::: ## [費波那契數列-遞迴法](https://onlinegdb.com/_QhOq6etF) ::: success ```#include <stdio.h> int f(int n){ if(n == 0){ return 0; } else if(n == 1){ return 1; } else{ return f(n-1) + f(n-2); } } int main(){ int n; printf("請輸入費波那契數列的項數\n"); scanf("%d", &n); printf("費波那契數列的第%d項是%d\n", n, f(n)); return 0; } ``` ::: ## [費波那契數列-陣列解法](https://onlinegdb.com/SbDQQkyAd) ::: success ```#include <stdio.h> int main() { int n , i ,fib[100]; fib[0] = 1; fib[1] = 1; printf("請問要查費波那契數列的第幾項?\n"); while (scanf("%i",&n)!= EOF){ for ( i = 2; i < n; i++){ fib[i] = fib[i-2]+fib[i-1]; } printf("費波那契數列的第%i項是%i\n",n,fib[n-1]); printf("\n請問要查費波那契數列的第幾項?\n"); } } ``` ::: ## [階層遞迴法](https://onlinegdb.com/P5ie9L5MB) ::: success ```#include <stdio.h> int f(int n){ if (n == 1){ return 1; } return n * f(n - 1); } int main() { printf("%i",f(10)); return 0; } ``` ::: ## [階層迭代法](https://onlinegdb.com/HD-BTRj3Q) ::: success ``` /*利用迭代法計算階層問題*/ #include <stdio.h> int f(int n){ int sum = 1, i; for(i = 1; i <= n; i++){ sum = sum * i; } return sum; } int main() { printf("%i",f(10)); return 0; } ``` ::: ## [找零機器](https://onlinegdb.com/AaiD24dfo) ::: success ``` #include <stdio.h> int main() { int cash; while(scanf("%i" , &cash) != EOF){ int cash100 = 0, cash50 = 0, cash10 =0, cash5 = 0, cash1 = 0; while (cash >= 100) { cash = cash -100; cash100 ++; } while (cash >= 50) { cash = cash -50; cash50 ++; } while (cash >= 10) { cash = cash -10; cash10 ++; } while (cash >= 5) { cash = cash -5; cash5 ++; } while (cash >= 1) { cash = cash -1; cash1 ++; } printf("100元有 %i張\n",cash100); printf("50元有 %i張\n",cash50); printf("10元有 %i塊\n",cash10); printf("5元有 %i塊\n",cash5); printf("1元有 %i塊\n",cash1); } } ``` ::: ## [身分證字號真偽判斷](https://onlinegdb.com/7c_-xJU0c) ::: success ``` #include <stdio.h> int main() { char city; char num[10]; scanf("%c" , &city); scanf("%s" , num); /*printf("%c\n" , city); printf("%s\n" , num); printf("%i\n" , city); printf("%i" , num[1]);*/ switch(city){ case 65 : city = 10; break; case 66 : city = 11; break; case 67 : city = 12; break; case 68 : city = 13; break; case 69 : city = 14; break; case 70 : city = 15; break; case 71 : city = 16; break; case 72 : city = 17; break; case 73 : city = 34; break; case 74 : city = 18; break; case 75 : city = 19; break; } //printf("%i", city); num[0] = num[0] - 48; //printf("%i", num[0]); num[1] = num[1] - 48; num[2] = num[2] - 48; num[3] = num[3] - 48; num[4] = num[4] - 48; num[5] = num[5] - 48; num[6] = num[6] - 48; num[7] = num[7] - 48; num[8] = num[8] - 48; int sum; for(int i; i < 8; i++){ sum = sum + num[i] * (8 - i); } sum = sum + num[8] + city/10 + (city % 10) * 9; if(sum % 10 == 0) printf("real"); else printf("fake"); } ``` ::: ## [星星](https://onlinegdb.com/GuK4Zj2CN) ::: success ``` #include <stdio.h> int main() { int i, j, k, x = 0, s = 9; for(k = 0; k < 5; k++){ for(i = 0; i < x; i++){ printf(" "); } for(j = 0; j < s; j++){ printf("*"); } printf("\n"); x = x + 1; s = s - 2; } } ``` ::: ## [冒牌費氏數列](https://onlinegdb.com/WERQ9W3jP) ::: success ``` #include <stdio.h> int f(int n) { if (n == 1) return 10; if (n == 2) return 15; if (n == 3) return 16; return f(n - 2) + f(n - 3); } int main() { int n; scanf("%d", &n); printf("%d", f(n)); return 0; } ``` ::: ## [解碼器](https://onlinegdb.com/4Cgebh0zW) ::: success ``` #include <stdio.h> #include <string.h> int main() { char arr[1000]; scanf("%s", arr); for(int i = 0 ; i < strlen(arr) ; i++) arr[i] = arr[i]-7; printf("%s", arr); return 0; } ``` ::: :::info ## 這兩年的心得感想 ``` 這兩年學習C語言真是有趣又挑戰! 一開始,我對於寫程式一竅不通,但隨著時間的推移,我開始理解程式的邏輯, 慢慢學會了C語言的語法。 每次解決一個難題,都讓我覺得非常有成就感。 而且,這段時間我也學會了如何和其他同學合作,一起解決問題。 總的來說,學習C語言讓我更加有信心面對挑戰了! ``` :::