2017年武汉大学计算机复试上机题

  1. 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?
int main() {
    int i = 1, sum = 1;
    while (i <= 10) {
        sum = (sum + 1) * 2;
        i++;
    }
    printf("第一天共摘了%d个桃子", sum);
    return 0;
}
  1. 一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,第n个月有多少只兔子?(其实还是斐波那契)
int feed(int n) {
    if (n == 1 || n == 2) {
        return 2;
    } else {
        return feed(n - 1) + feed(n - 2);
    }
}
int main() {
    int n;
    while(scanf("%d", &n) != EOF) {
        int ans = feed(n);
        printf("第%d月共有%d只兔子\n", n, ans);
    }
    return 0;
}
  1. 将一个正整数分解质因数。例如:输入90,打印出90=233*5。
void getPri(int n, int m) {
    if (n == 1) {
        return;
    }
    for (int i = 2; i <= n / 2; i++) {
        //如果当前因数是质数
        if (m % i == 0) {
            //如果m等于i,则分解完成
            if (m / i == 1) {
                printf("%d\n", i);
            } else {
                printf("%d *", i);
            }
            //递归分解
            getPri(n, m / i);
            break;
        }
    }
}
int main() {
    int n;
    while(scanf("%d", &n) != EOF) {
        getPri(n, n);
    }
    return 0;
}
  1. 输入一个整数,再从输入的一组数中找出输入的整数出现的次数和位置。
int main() {
    int n, i = 0, num, ans[10010], time = 0;
    char c;
    while (scanf("%d", &n) != EOF) {
        int t = 0;
        while(1) {
            scanf("%d", &num);
            if (num == n) {
                ans[i] = t;
                time++;
                i++;
            }
            t++;
            c = getchar();
            if (c == '\n') {
                break;
            }
        }
        printf("%d在数组中出现了%d次,它是数组中的", n, time);
        for (int i = 0; i < time; i++) {
            printf("第%d个 ", ans[i] + 1);
        }
        printf("\n");
    }
    return 0;
}
  1. 给一个数,若该数的相邻数都不相同,则称该数为不重复数(如110为重复数,101为不重复数)。输入n,编程实现比n大的最小不重复数。
bool repeatNum(int n) {
    int str[20];
    int t = 0;
    while (n > 0) {
        str[t] = n % 10;
        n = n / 10;
        t++;
    }
    for (int i = 0; i < t; i++) {
        for (int j = 0; j < t - i - 1; j++) {
            if (str[j] == str[j + 1]) {
                return false;
            }
        }
    }
    return true;
}
int main() {
    int n;
    while(scanf("%d", &n) != EOF) {
        n++;
        bool flag = repeatNum(n);
        while (!flag) {
            n++;
            flag = repeatNum(n);
        }
        if (n >= 100000) {
            printf("error!");
        } else {
            printf("%d\n", n);
        }
    }
    return 0;
}

你可能感兴趣的:(2017年武汉大学计算机复试上机题)