12.16 小学减法题

发布于 2024-12-16  95 次阅读


你拿到一个数组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;
}
届ける言葉を今は育ててる
最后更新于 2024-12-16