题意:给出几个数 ,寻找一个最小数使这几个数mod它的值不相同
解析:暴力枚举从1开始,将模完的数保存在一个数组里,如果遇到相同的值,就增大值继续枚举。直到寻找到。
此处使用了mod[]数组,将模完的结果作为mod[]的下标,这样如果出现相同的值比较好发现(类比Find a multiple(鸽巢原理))
此处应注意超时
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
#define maxn 100010
long long t,n,m,fun[maxn];
bool mod[maxn];
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&fun[i]);
long long m=1;
while(1)
{
int flag=1;
memset(mod,0,sizeof(mod));
for(int j=1;j<=n;j++)
{
if(mod[fun[j]%m]!=0)
{
flag=0;
break;
}
mod[fun[j]%m]=1;
}
if(flag==1)
{
break;
}
m++;
}
printf("%lld\n",m);
}
}