你拿到一个数组a,想让数组中的所有数变得一样,但是你的能力有限,你只有一种能力:选择一个 i (1≤i≤n),使 a[i]减少 k ,可以多次减,减成负数也没关系。并且你可以无限次使用这个能力,请判断是否能够通过一定的操作将该数组中的所有元素变得相同。如果可以,输出 'YES';否则,输出 'NO'。此外,如果不可以使所有元素相同,请输出数组中最少需要保留多少类元素(相同的元素视为一类)
其中,输入的元素都是整数(包括0),要减的数k为正整数
例如:
3 3
3 6 9
得到结果YES

代码如下:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<stdlib.h> int main() { int n,k; scanf("%d %d", &n,&k); int* in = malloc(sizeof(int) * n); for (int i = 0; i < n; i++) { scanf("%d", &in[i]); } int *figure=malloc(sizeof(int)*k); //非常重要的一步: figure[0] = 0; //没有初始化就开始figure[in[i]%k]++的就是耍流氓 for (int i = 0; i < n; i++) { figure[in[i] % k]++; } int classification = 0; for (int i = 0; i < k; i++) { if (figure[i] > 0) { classification++; } } if (classification == 1) { printf("YES"); } else { printf("NO\n%d",classification); } return 0; }
Comments 1 条评论
byji00