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.}
要学习的是函数的使用和代码的简洁,但是函数不用也没有什么关系,感觉差不多