51 lines
1.9 KiB
C++
51 lines
1.9 KiB
C++
#include <stdio.h>
|
|
|
|
int main() {
|
|
long long T; //注意变量都要初始化 ,T为数组个数
|
|
scanf("%lld", &T); //数组个数,决定过程要执行多少次
|
|
for (int i = 0; i < T; i++) {
|
|
long long n, m, bianhao, yushu, max = -1, index; //注意变量都要初始化,n为包裹个数,m为箱子个数,result是余数,max是装的最多
|
|
//以上变量必须定义在循环里,因为一组过后所有数据要重新开始!要不然max,index值未清除!
|
|
scanf("%lld%lld", &n, &m); //键入包裹的个数和箱子的个数
|
|
long long Amount[m], number[n]; //Amount是定义对应的箱子里装几个 ,number是用数组记录包裹的“编号”
|
|
//禁止写错数组个数!
|
|
for (int j = 0; j < m; j++) //初始化箱子数组 ,注意数组是m个
|
|
{
|
|
Amount[j] = 0;
|
|
}
|
|
for (int k = 0; k < n; k++) //把包裹赋值,记录到number里 注意数组是n个
|
|
{
|
|
scanf("%lld", &bianhao);
|
|
number[k] = bianhao;
|
|
}
|
|
for (int s = 0; s < n; s++) //进行mol m运算,余数计入number里
|
|
{
|
|
yushu = number[s] % m;
|
|
Amount[yushu] = Amount[yushu] + 1;
|
|
}
|
|
for (int t = 0; t < m; t++) //此循环计算哪个箱子装的最多
|
|
{
|
|
//max=-1;错误 在循环里定义会导致max每走一个t都会被重置!
|
|
if (max < Amount[t]) {
|
|
max = Amount[t];
|
|
}
|
|
}
|
|
for (int u = 0; u < m; u++) //此循环寻找下标
|
|
{
|
|
if (Amount[u] == max) {
|
|
index = u;
|
|
break;
|
|
}
|
|
}
|
|
for (int v = 0; v < m; v++) //此循环输出amount数组里各个元素的大小
|
|
{
|
|
printf("%lld ", Amount[v]);
|
|
}
|
|
printf("\n");
|
|
printf("%lld %lld", index, max);
|
|
printf("\n");
|
|
}
|
|
return 0;
|
|
}
|
|
|