wangchi12321

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

task1:

 1 #include <stdio.h>
 2 
 3 char score_to_grade(int score);
 4 
 5 int main(){
 6     int score;
 7     char grade;
 8     while(scanf("%d",&score)!= EOF){
 9         grade = score_to_grade(score);
10         printf("分数:%d, 等级:%c\n\n", score, grade);
11     }
12     
13     return 0;
14  } 
15  
16  char score_to_grade(int score){
17      char ans;
18      
19      switch(score/10){
20          case 10: 
21          case 9: ans = 'A';break;
22          case 8: ans = 'B';break;
23          case 7: ans = 'C';break;
24          case 6: ans = 'D';break;
25          default: ans = 'E';
26      }
27      
28      return ans;
29  }

问题一:将分数转换为对应的等级

问题二:1.会依次执行从case 9到default的所有分支,造成输出结果错误。

    2.双引号引用表示字符串(地址),于char类型不相符。

 

task2:

 1 #include <stdio.h>
 2 
 3 int sum_digits(int n);
 4 
 5 int main(){
 6     int n;
 7     int ans;
 8     
 9     while(printf("Enter n: "), scanf("%d", &n) != EOF){
10         ans = sum_digits(n);
11         printf("n = %d, ans = %d\n\n", n, ans);
12     }
13     
14     return 0;
15 }
16 
17 int sum_digits(int n){
18     int ans = 0;
19     
20     while(n != 0){
21         ans += n % 10;
22         n /= 10;
23     }
24     
25     return ans;
26 }

 

问题一:计算整数n各位数字之和

问题二:等效。一个是递归算法,另一个是循环算法,但效果是相同的。

task3:

 1 #include <stdio.h>
 2 
 3 int power(int x, int n);
 4 
 5 int main(){
 6     int x, n;
 7     int ans;
 8     
 9     while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF){
10         ans = power(x, n);
11         printf("n = %d, ans = %d\n\n", n, ans);
12     }
13     
14     return 0;
15 } 
16 
17 int power(int x, int n){
18     int t;
19     
20     if(n == 0)
21         return 1;
22     else if(n % 2)
23         return x * power(x, n-1);
24     else{
25         t =power(x, n/2);
26         return t * t;
27     }
28 }

问题一:函数 power 的功能是​​计算整数 x 的非负整数次幂​​,即计算 xnn0)。

问题二:

ƒ(w,n)=1 if n = 0;

ƒ(w,n)=w*power(w,n-1) if n = 2k+1(k∈N*);

ƒ(w,n)=[power(w,n/2)]2 if n = 2k(k∈N*);

task4:

#include<stdio.h>

int is_prime(int n);

int main(){
	int n;
	int count = 0;
	printf("100以内的孪生素数: \n");
	for(n = 2;n <= 98;n++){
		if(is_prime(n) && is_prime(n+2)){
			printf("%d %d\n", n, n+2);
			count++;
		}
	}
	printf("100以内的孪生素数共有 %d 个\n", count);
	
	return 0;
}

int is_prime(int n){
	int i;
	
	if(n <= 1)
		return 0;
	for(i=2; i * i <= n; i++){
		if(n % i == 0)
		return 0;
	}
	
	return 1;
}

task5:

#include <stdio.h>

int hanoi(int n, char from, char to, char via) {
    if (n == 1) {
        printf("1: %c --> %c\n", from, to);
        return 1;
    }
    
    int count = 0;
    count += hanoi(n-1, from, via, to);
    printf("%d: %c --> %c\n", n, from, to);
    count += 1;
    count += hanoi(n-1, via, to, from);
    return count;
}

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        printf(""); 
        int total = hanoi(n, 'A', 'C', 'B');
        printf("一共移动了%d次\n\n", total); 
    }
    return 0;
}

task6:

迭代方法:

 1 #include <stdio.h>
 2 
 3 int func(int n, int m);
 4 
 5 int main(){
 6     int n, m;
 7     int ans;
 8         
 9     while(scanf("%d%d", &n, &m) != EOF) {
10     ans = func(n, m); 
11     printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
12     }
13     
14     return 0;
15 }
16 
17 int func(int n, int m){
18     int fenzi, fenmu;
19     int i;
20     if(m ==0 || m == n)
21         return 1;
22     if(m > (n - m))
23         m = n - m;
24     fenzi = 1;
25     for(i=0;i < m;i++){
26         fenzi *= (n-i);
27     }
28     fenmu = 1;
29     for(i=1;i<=m;i++){
30         fenmu *= i;
31     }
32     
33     return fenzi/fenmu;
34 }

递归方法:

 1 #include <stdio.h>
 2 
 3 int func(int n, int m);
 4 
 5 int main(){
 6     int n, m;
 7     int ans;
 8         
 9     while(scanf("%d%d", &n, &m) != EOF) {
10     ans = func(n, m); 
11     printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
12     }
13     
14     return 0;
15 }
16 
17 int func(int n, int m){
18     if (m == 0 || m == n) 
19         return 1;
20     
21     if (m > n - m) 
22         return func(n, n - m);
23     
24     return func(n - 1, m - 1) * n / m;
25 }

task7:

 1 #include <stdio.h>
 2 
 3 int gcd(int a, int b, int c);
 4  
 5 int main() {
 6     int a, b, c;
 7     int ans;
 8 
 9     while(scanf("%d%d%d", &a, &b, &c) != EOF) {
10         ans = gcd(a, b, c); // 函数调用
11         printf("最大公约数: %d\n\n", ans);
12     }
13 
14     return 0;
15 }
16 
17 int gcd(int a, int b, int c){
18     if (a == 0 && b == 0 && c == 0) 
19         return 0;
20     
21     a = abs(a); b = abs(b); c = abs(c);
22     int min_val = -1;
23     
24     if (a != 0) 
25         min_val = a;
26     if (b != 0 && (min_val == -1 || b < min_val)) 
27         min_val = b;
28     if (c != 0 && (min_val == -1 || c < min_val)) 
29         min_val = c;
30     int i;
31     for (i = min_val; i >= 1; i--) {
32         if ((a % i == 0 || a == 0) && (b % i == 0 || b == 0) && (c % i == 0 || c == 0)) {
33             return i;
34         }
35     }
36     return 1;
37 }

 

posted on 2025-04-09 23:34  卡希勒  阅读(13)  评论(0)    收藏  举报