问题 G: 例题5-7 求圆周率pi的近似值

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. using namespace std;
  5. int main(){
  6. double sum = 0.0;
  7. double sign = 1;
  8. for(double i =1; fabs(sign/i) > 1e-6; i += 2){
  9. sum += (sign/i);
  10. sign = -sign;
  11. }
  12. printf("PI=%.8lf\n",4.0 * sum);
  13. }

问题 I: 习题5-10 分数序列求和

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. int a=1, b=1;
  5. int t;
  6. double sum = 0.0;
  7. for(int i =1; i <=20;i ++){
  8. t= b;
  9. b= a+ b;
  10. a =t;
  11. sum +=(double)b/a;
  12. //cout << a << ' ' << b << ' '<< i << ' ' <<sum << endl;
  13. }
  14. printf("%.6lf\n",sum);
  15. //cout << a << ' ' << b << endl;
  16. }

问题 A: 习题6-4 有序插入

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. int a[10];
  5. for(int i = 0; i < 9 ; i ++){
  6. cin >> a[i];
  7. }
  8. int k;
  9. cin >> k;
  10. for(int i = 8; i >= 0 ; i --){
  11. if(a[i] > k){
  12. a[i+1] =a[i];
  13. }else{
  14. a[i+1]=k;
  15. break;
  16. }
  17. }
  18. for(int i = 0; i < 10 ; i ++){
  19. cout << a[i] << endl;
  20. }
  21. }

问题 C: 习题6-6 杨辉三角

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. int n;
  5. cin >> n;
  6. int i, j, a[n][n];
  7. for(i =0; i < n; i ++){
  8. a[i][i] =1;
  9. a[i][0] =1;
  10. }
  11. for(i = 2; i < n; i ++){
  12. for(j=1; j<i; j ++){
  13. a[i][j] = a[i-1][j] + a[i-1][j-1];
  14. }
  15. }
  16. for(i = 0; i < n; i ++){
  17. for(j=0; j<=i; j ++){
  18. printf("%d ",a[i][j]);
  19. }
  20. cout << endl;
  21. }
  22. }

问题 D: 习题6-12 解密

注意ascii码解密的转换

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. string s;
  5. cin >> s;
  6. string res;
  7. for(auto c:s){
  8. if(c<='Z' && c >= 'A') res += 'A' + 'Z'-c;
  9. else if( c<='z' && c >= 'a') res += 'a' + 'z'-c;
  10. else res +=c;
  11. }
  12. cout << res;
  13. }

问题 E: 习题6-13 字符串比较

字符串比较需要直接叠加

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. int main(){
  5. char s1[100], s2[100];
  6. scanf("%s",s1);
  7. scanf("\n%s",s2);
  8. int n = max(strlen(s1),strlen(s2));
  9. int ret=0;
  10. for(int i =0; i <n; i++){
  11. ret+= s1[i]-s2[i];
  12. }
  13. //printf("%s\n",s1);
  14. //printf("%s\n",s2);
  15. cout << ret;
  16. }
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. int main(){
  5. int a[20] ={1,1};
  6. printf("%d\n",a[0]);
  7. printf("%d\n",a[1]);
  8. for(int i =2;i < 20; i ++){
  9. a[i] = a[i-1] + a[i-2];
  10. printf("%d\n",a[i]);
  11. }
  12. }

问题 B: C语言10.2

  1. #include <iostream>
  2. //#include <string>
  3. #include <string.h>
  4. using namespace std;
  5. void swap(int *p1,int *p2){
  6. if(*p1 < *p2){
  7. int temp = *p1;
  8. *p1= *p2;
  9. *p2 = temp;
  10. }
  11. }
  12. int main(){
  13. int a, b ,c;
  14. cin >> a >> b >> c;
  15. swap(&a,&c);
  16. swap(&a,&b);
  17. swap(&b,&c);
  18. cout << a <<' '<<b << ' ' <<c << endl;
  19. }

问题 C: C语言10.10

  1. #include <iostream>
  2. //#include <string>
  3. #include <string.h>
  4. using namespace std;
  5. int main(){
  6. char *a = "I love China!";
  7. int n;
  8. cin >> n;
  9. a += n;
  10. puts(a);
  11. }

问题 D: C语言10.15

#include <iostream>
//#include <string>
#include <string.h>
using namespace std;

void mini(char*p, char*q){
    if(strcmp(p,q) > 0){
        char x[20];
        //char *temp = x;
        strcpy(x, p);
        strcpy(p, q);
        strcpy(q, x);
    }
}


int main(){
    char s1[20], s2[20], s3[20];
    scanf("%s",s1);
    scanf("%s",s2);
    scanf("%s",s3);
    mini(s1,s2);
    mini(s1,s3);
    mini(s2,s3);
    cout << s1 << endl;
    cout << s2 << endl;
    cout << s3 << endl;

    return 0;
}

问题 E: C语言10.16

#include <iostream>

using namespace std;

void input(int *num){
    for(int i = 0 ; i < 10; i ++){
        scanf("%d",&num[i]);
    }
}


void proc(int *num){
    int max = num[9];
    int min = num[0];
    int maxi;
    int mini;
    for(int i=1; i < 10; i ++){
        if(num[i] > max){
            max = num[i];
            maxi = i;
        }

        if(num[i] < min){
            min = num[i];
            mini = i;
        }
    }

    int temp;
    temp = num[9];
    num[9] = num[maxi];
    num[maxi] = temp;
    int temp1;
    temp1 = num[0];
    num[0] = num[mini];
    num[mini] = temp1;
}

void output(int *num){
    for(int i = 0; i < 10; i ++){
        printf("%d ", num[i]);
    }

    printf("\n");
}



int main(){
    int a[10];
    int *num = a;
    input(num);
    proc(num);
    output(num);

    return 0;
}

问题 D: C语言11.7

#include <iostream>
#include <vector>

using namespace std;

struct person{
    int num;
    char name[10];
    char sex;
    char job;
    union {
        int clas;
        char position[10];
    }category;
};


int main(){
    int n;
    cin >> n;
    vector<person> per(n);
    for(int i = 0; i < n; i ++){
        scanf("%d %s %c %c", &per[i].num, per[i].name, &per[i].sex, &per[i].job);
        if(per[i].job == 's'){
            scanf("%d",&per[i].category.clas);
        }
        if(per[i].job == 't'){
            scanf("%s",per[i].category.position);
        }
    }
    for(int i =0; i < n; i ++){
        if(per[i].job == 's'){
            printf("%d %s %c %c %d\n", per[i].num, per[i].name, per[i].sex, per[i].job,per[i].category.clas);
        }
        if(per[i].job == 't'){
            printf("%d %s %c %c %s\n", per[i].num, per[i].name, per[i].sex, per[i].job,per[i].category.position);
        }    
    }
}

问题 D: C语言11.7

#include<stdio.h>

struct student{

         int id;

         char name[20];

         int c1,c2,c3;

}stu[5];

void input(){

         int n=5;

         for(int i=0;i<n;i++){

                   scanf("%d %s %d %d %d",&stu[i].id,stu[i].name,&stu[i].c1,&stu[i].c2,&stu[i].c3);

         }       

}

void print(){

         int n=5;

         for(int i=0;i<n;i++){

                   printf("%d %s %d %d %d\n",stu[i].id,stu[i].name,stu[i].c1,stu[i].c2,stu[i].c3);

         }

}

int main(){

         input();

         print();

         return 0;

}

问题 E: C语言11.8

#include <iostream>
#include <vector>

using namespace std;

struct student{
    int id;
    char name[20];
    int c1, c2, c3;


}stu[10];


int main(){
    int n = 10;
    double cnt1 = 0, cnt2 = 0, cnt3 = 0;
    int average[19];

    for(int i = 0 ; i < n; i ++){
        scanf("%d %s %d %d %d", &stu[i].id, stu[i].name, &stu[i].c1, &stu[i].c2, &stu[i].c3);
        cnt1 += stu[i].c1;
        cnt2 += stu[i].c2;
        cnt3 += stu[i].c3;
        average[i] = (stu[i].c1 + stu[i].c2 + stu[i].c3)/3;
    }

    cnt1 /=10.0;
    cnt2 /=10.0;
    cnt3 /=10.0;

    int max = 0;
    int i, k;
    for (i = 0;i < 10; i ++){
        if (average[i] > max){
            max = average[i];
            k = i;
        }
    }
    printf("%.2lf %.2lf %.2lf\n", cnt1, cnt2, cnt3);
    printf("%d %s %d %d %d", stu[k].id, stu[k].name, stu[k].c1, stu[k].c2, stu[k].c3);

}

[PA T B1001]害死人不偿命的(3n+l)猜想

#include <iostream>

using namespace std;

int main(){
    int n, step = 0;
    scanf("%d",&n);
    while(n  != 1){
        if(n % 2 == 0) n = n /2;
        else n = (3 *n + 1)  /2;
        step ++;
    }

    printf("%d\n", step);

    return 0;
}