害,ballball大佬们帮助(1043题)

starboy edited 2 月前

有情况没有考虑到应该是,

#include<stdio.h>
#include<stdlib.h>
int pan(int *G, int M, int i);
int comp(const void*a,const void*b)
{
    return *(int*)a-*(int*)b;
}

int main()
{
	int N, M;
	scanf("%d", &N);
	int G[300];
	int n, m, i;

	for(n = 1; n <= N; n++)
	{
		scanf("%d", &M);
		for(m = 0; m < M; m++)
			scanf("%d", &G[m]);
		if(M > 1)
		{
			qsort(G, M, sizeof(int), comp);
			for(i = M; i < *(G+M-1); i++)
			{
				if(pan(G, M, i))
				{
					printf("%d\n", i);
					break;
				}
			}
		}
		else
			printf("1\n");
			
	}
	
	return 0;
}

int pan(int *G, int M, int i)
{
	int x, y;
	int a = 0, b = 1;
	for(x = 0; x < M; x++)
	{
		for(y = x+1; y <= M; y++)
		{
			if((*(G+x)%i) == (*(G+y)%i))
				return a;
		}
	}
	
	return b;
}

Comments

Kuroko

3个细节问题,首先是pan中的循环,应该是for(x = 0;x < M-1;i++)和for(int y = x+1;y < M;y++),其次是24行的星号(G+M-1)应该改成星号(G+M-1)+2,原因是若终止条件 = G[MAX],则可能存在两个余数为0的情况,因此终止条件应该改为 <= G[MAX]+1,也就是 < G[MAX]+2

2864329934

for(x = 0; x < M; x++)改为for(x = 0; x <=M-2; x++)

for(y = x+1; y <= M; y++)改为for(y = x+1; y <= M-1; y++)

for(i = M; i < (G+M-1); i++)改为for(i = 2; i < (G+M-1)+1; i++)

你当前正在回复 博客/题目
存在问题!