UVA10905: Children's Game(排序)
题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/A
题目需求:,给n个数字,将它们重新排序得到一个最大的数字,好像给出123 456 789 拼为 789456123 最大
这题可以算是一个排序题,不过排序的规则有讲究
如果想用字典序排序,显然错了,好像999123 999 , 按字典序排序999123在前面,得到的数字为999123999 , 显然没有不够999999123 大
题目解析:冒泡排序,首先先按字典序排序,这样可以使冒泡排序的交换次数大大减小。
如果有两个数90 9,如果按字典序排序则90>9,此时比较strcat(“90”,“9”)与(“9”,”90“)的大小,使大的与小的位置交换。具体操作请看代码,一看就会明白什么意思的。
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <math.h> #include <queue> #define eps 1e-9 typedef long long ll; using namespace std; int n; char str[101]; char a[60][101]; char s2[202],s3[202]; int cmp(const void *a,const void *b) { return strcmp((char *)b,(char *)a); } int main() { while(scanf("%d",&n)!=EOF&&n!=0) { for(int i=0;i<n;i++) scanf("%s",a[i]); qsort(a,n,sizeof(a[0]),cmp); for(int i=1;i<n;i++) { for(int j=0;j<n-i;j++) { strcpy(s2,a[j+1]); strcat(s2,a[j]); strcpy(s3,a[j]); strcat(s3,a[j+1]); if(strcmp(s2,s3)>0) { strcpy(str,a[j]); strcpy(a[j],a[j+1]); strcpy(a[j+1],str); //printf("%s %s\n",a[j],a[j+1]); } } } for(int i=0;i<n;i++) { printf("%s",a[i]); } cout<<endl; } return 0; }
分类:
数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构