你拿到一个数组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 条评论
博主 📊 You have received 1 message № 172260. Read > https://telegra.ph/Ticket–6974-01-15?hs=28cb38bf52565142a72c4d148932ad18& 📊
byji00