singledog

假如没有情侣存在,那么单身狗一定是一个非常恐怖的生物。他们可以去电影院最多一人占据3个座位(大概是因为他们不愿意和别人坐在相邻的位置)难以想象他们为什么会有这么强大的战斗力。

那么问题来了。

假如一只单身狗的ID十进制下表示为N,在D进制下,他的战斗力为数字x出现的次数,而他的最大战斗力,则是所有进制下的战斗力中最大的那个。

n不大于10000, x为0到9中的一个数。D大于等于2.

给出n和x,问这只单身狗的战斗力。

样例输入:

3 1

样例输出:

2

 

 

其实就是在所有进制中选择想要数字出现次数最多的进制

一开始,我一直在想进制开到多少比较好,最后发现必须要开到n

 

我的

 1 #include<stdio.h>
 2 int main() {
 3     int n, x, a[10001] = {0}, max, i, yu, j = 2;
 4     scanf("%d %d", &n, &x);
 5     int temp = n;
 6     for (i = 2; i <= n; i++) {
 7         while (temp) {
 8             yu = temp % i;
 9             if (yu == x) {
10                 a[j]++;
11             }
12             temp = temp / i;
13         }
14         j++;
15         temp = n;
16     }
17     max = a[2];
18     for (i = 3; i <= n; i++) {
19         if (a[i] > max) {
20             max = a[i];
21         }
22     }
23     printf("%d\n", max);
24     return 0;
25 }

 

 

标答

    1.#include<stdio.h>
2.int MAX(int a, int b) {
3.    return a > b ? a : b;
4.}
5.int sol(int n, int d, int x) {
6.    int tmp, sum = 0;
7.    while (n > 0) {
8.        tmp = n % d;
9.        if (tmp == x) sum++;
10.        n /= d;
11.    }
12.    return sum;
13.}
14.int main() {
15.    int n, x, i;
16.    scanf("%d%d", &n, &x);
17.    int ans = 0;
18.    for (i = 2; i <= n+1; i++) {
19.        ans = MAX(sol(n, i, x), ans);        //好简洁的写法
20.    }
21.    printf("%d\n", ans);
22.    return 0;
23.}

要学习的是函数的使用和代码的简洁,但是函数不用也没有什么关系,感觉差不多

 

posted on 2015-12-21 20:25  _阿赞  阅读(757)  评论(0编辑  收藏  举报