请加强数据!!!
查看原帖
请加强数据!!!
1252898
ShadowBlood楼主2024/4/14 20:59

对于数据我之前的代码可以AC

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>

int a = 0;//储存无用返回值(去警告)

char num[25][15] = { 0 };

int judge(int sit1, int sit2)
{
	//判断
	int length1 = (int)strlen(num[sit1]);
	int length2 = (int)strlen(num[sit2]);
	for (int i = 0; i < length1 && i < length2; i++)
	{
		if (num[sit1][i] - num[sit2][i] > 0)
		{
			return 1;
		}
		else if (num[sit1][i] - num[sit2][i] == 0)
		{
			continue;
		}
		else
		{
			return 0;
		}
	}

	//特判
	if ((length1 > 0 && length1 < length2 && num[sit1][length1 - 1] - num[sit2][length1] > 0) || 
		(length2 > 0 && length1 > length2 && num[sit1][length2] - num[sit2][length2 - 1] > 0))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

void exchange(int sit1, int sit2)
{
	//交换
	char tmp[15] = { 0 };
	strcpy(tmp, num[sit1]);
	strcpy(num[sit1], num[sit2]);
	strcpy(num[sit2], tmp);
}

void sort(int left, int right)
{
	//是否结束
	if (left >= right)
	{
		return;
	}

	//排序
	int begin = left;
	int end = right;
	int key = begin;
	while (begin < end)
	{
		//另一端好的
		while (end > begin)
		{
			if (judge(end, key))
			{
				break;
			}
			end--;
		}

		//key一端坏的
		while (begin > end)
		{
			if (judge(key, begin))
			{
				break;
			}
			begin++;
		}

		//交换
		if (begin < end)
		{
			exchange(begin, end);
		}
	}

	//key交换
	if (key < end)
	{
		exchange(key, end);
	}

	//继续
	sort(left, begin - 1);
	sort(end + 1, right);
}

int main()
{
	int n = 0;

	//数据个数
	a = scanf("%d", &n);
	a = getchar();

	//数据
	for (int i = 1; i <= n; i++)
	{
		a = scanf("%s", &num[i]);
		a = getchar();
	}

	//排序
	sort(1, n);

	//输出
	for (int i = 1; i <= n; i++)
	{
		printf("%s", num[i]);
	}
	printf("\n");

	return 0;
}

但当输入为:

2

23 2324

我的代码输出结果为23 2324,但正确结果为2324 23

2024/4/14 20:59
加载中...