[C语言] <算法笔记>笔记及题目(一)

2020-03-16  本文已影响0人  丶噗噗噗噗噗

<算法笔记>第五章

题目: Codeup


5.1 简单数学

作业比赛编号 : 100000588 - 《算法笔记》5.1小节——数学问题->简单数学

问题 A: 守形数

题目描述
守形数是这样一种整数,它的平方的低位部分等于它本身。
比如25的平方是625,低位部分是25,因此25是一个守形数。
编一个程序,判断N是否为守形数。

输入
输入包括1个整数N,2<=N<100。

输出
可能有多组测试数据,对于每组数据,
输出"Yes!”表示N是守形数。
输出"No!”表示N不是守形数。

#include <stdio.h>


int to_array(int n, int num[]){
    int i;
    for(i=0; n>=1; i++){
        num[i] = n%10;
        n /= 10;
    }
    return i;
}


int main(void) {
    int n, nn, i, num_nn[10], num_n[3];
    while(scanf("%d", &n) != EOF){
        int len = to_array(n, num_n);
        nn = n*n;
        to_array(nn, num_nn);
        for(i=0; i<len;i++) {
            if (num_n[i] != num_nn[i]) {
                printf("No!\n");
                break;
            }
        }
        if(i == len) printf("Yes!\n");
    }
    return 0;
}

问题 B: 反序数

题目描述
设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
求N的值

输入
程序无任何输入数据。

输出
可能有多组测试数据,对于每组数据,
输出"Yes!”表示N是守形数。
输出"No!”表示N不是守形数。

#include <stdio.h>


int to_array(int n, int num[]){
    int i;
    for(i=0; n>=1; i++){
        num[i] = n%10;
        n /= 10;
    }
    return i;
}


int main(void) {
    int n, nn, i, num_nn[10], num_n[3];
    while(scanf("%d", &n) != EOF){
        int len = to_array(n, num_n);
        nn = n*n;
        to_array(nn, num_nn);
        for(i=0; i<len;i++) {
            if (num_n[i] != num_nn[i]) {
                printf("No!\n");
                break;
            }
        }
        if(i == len) printf("Yes!\n");
    }
    return 0;
}

问题 C: 百鸡问题

题目描述
用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解

输入
测试数据有多组,输入n

输出
对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出

#include <stdio.h>


int main(void) {
    int n;
    scanf("%d", &n);
    int x=0, y=0, z=0;
    for(x=0; 5*x<=n; x++){
        for(y=0; 3*y<=n; y++){
            for(z=0; z<101; z++){
                if(x+y+z==100 && (15*x+9*y+z)<=(3*n)) printf("x=%d,y=%d,z=%d\n", x, y, z);
            }
        }
    }
    return 0;
}

问题 D: abc

题目描述
设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有:abc+bcc=532。求满足条件的所有a、b、c的值

输入
题目没有任何输入

输出
请输出所有满足题目条件的a、b、c的值。
a、b、c之间用空格隔开。
每个输出占一行

#include <stdio.h>


int main(void) {

    int x=0, y=0, z=0;
    for(x=0; x<=9; x++){
        for(y=0; y<=9; y++){
            for(z=0; z<=9; z++){
                if(100*x+110*y+12*z==532) printf("%d %d %d\n", x, y, z);
            }
        }
    }
    return 0;
}

5.2 最大公约数与最小公倍数

作业比赛编号 : 100000589 - 《算法笔记》5.2小节——数学问题->最大公约数与最小公倍数

1818: 最大公约数

题目描述
输入两个正整数,求其最大公约数

输入
测试数据有多组,每组输入两个正整数

输出
对于每组输入,请输出其最大公约数

#include <stdio.h>


int gcd(int a, int b){
    if(b==0) return a;
    else return gcd(b, a%b);
}


int main(void) {
    int m, n;
    while(scanf("%d %d", &m, &n)!=EOF){
        printf("%d\n", gcd(m, n));
    }
    return 0;
}
/*
最小公倍数: m/gcd(m, n)*n
*/
上一篇下一篇

猜你喜欢

热点阅读