ACM解题--(1)ASCII码排序

本文介绍了一种ASCII码排序算法,该算法通过比较字符的ASCII值实现排序。文章提供了两种实现方式,一种使用了交换操作,另一种则通过巧妙的数学运算避免了交换,从而提高了效率。

ASCII码排序

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 2
描述
输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。
输入
第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。
输出
对于每组输入数据,输出一行,字符中间用一个空格分开。
样例输入
3
qwe
asd
zxc
样例输出
e q w
a d s
c x z
代码1
#include <iostream>
#include <string>
using namespace std;
void Swap(char& a, char& b)
{
	char t = a;
	a = b;
	b = t;
}
void test()
{
	int n = 0;
	cin >> n;
	char szIn[4];
	while (n--)
	{
		cin >> szIn;
		cout << szIn[0] << " " << szIn[1] << " " << szIn[2] << "\n";
		if (szIn[0] > szIn[1])
		{
			Swap(szIn[0], szIn[1]);
		}
		if (szIn[2] < szIn[1])
		{
			Swap(szIn[2], szIn[1]);
		}
		if (szIn[1] < szIn[0])
		{
			Swap(szIn[0], szIn[1]);
		}
		cout << szIn[0] << " " << szIn[1] << " " << szIn[2] << "\n";
	}
}
int main()
{
	test();
	return 0;
}

运行结果:

运行号 用户 题目 结果 时间 内存 语言 提交时间

782337arbboterASCII码排序Accepted4232C/C++03-26 15:44:57

代码2

#include <iostream>
#include <string>
using namespace std;
void test()
{
	int n = 0;
	cin >> n;
	char szIn[4];
	char szOut[3];
	while (n--)
	{
		cin >> szIn;

		szOut[0] = (szIn[0] < szIn[1] ? szIn[0] : szIn[1])<szIn[2] ? (szIn[0] < szIn[1] ? szIn[0] : szIn[1]):szIn[2];
		szOut[2] = (szIn[0] > szIn[1] ? szIn[0] : szIn[1])>szIn[2] ? (szIn[0] > szIn[1] ? szIn[0] : szIn[1]) : szIn[2];
		szOut[1] = szIn[0] + szIn[1] + szIn[2] - szOut[0] - szOut[2];
		
		cout << szOut[0] << " " << szOut[1] << " " << szOut[2] << "\n";
	}
}
int main()
{
	test();
	return 0;
}

运行结果:

运行号 用户 题目 结果 时间 内存 语言 提交时间

782347arbboterASCII码排序Accepted0232C/C++03-26 15:58:07

由于第二种方法没有swap,所以运行时间减少了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值