# 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語言讓我更加有信心面對挑戰了!
```
:::