最大的正整数c++

题目描述

输入n个正整数Xi,输出由这些正整数拼接而成的最大正整数。

输入

第一行只有一个正整数:n
第二行共有n个正整数,数与数之间用一个空格隔开
( 1 < n <= 20 )
( 1 < Xi < 30 000 000 )
 

输出

只有一行且只有一个正整数:拼接而成的最大正整数
 

样例输入
3
13 312 343

样例输出
34331213

 思路:先定义函数布尔型的cmp,表示排序方式,再定义字符串s,输入s,然后用sort进行排序,最后输出。

上代码:

#include <bits/stdc++.h>//万能头
using namespace std;
bool cmp(string a,string b){//来个自定义
	return (a+b)>(b+a);//排序方式
}
int main(){
	int n;
	cin>>n;
	string s[100];//使用字符串更方便
	for(int i=0;i<n;i++){
		//TODO
		cin>>s[i];//输入
	}
	sort(s,s+n,cmp);//快排搞定
	for(int i=0;i<n;i++){
		//TODO
		cout<<s[i];//输出
	}
	return 0;//完美结束
}

有哪位大佬有更简便的方法,欢迎私信! 

<think>好的,我现在要解决用户的问题,即寻找关于“B3828优秀正整数问题C++代码实现。首先,我需要明确这个问题的具体要求。题目编号是B3828,但用户没有提供具体的题目描述,所以首先我需要推测或查找这个题目的内容。 由于用户提到这是一个编程问题,可能来自某个在线评测平台(如华为OD机试),但具体的题目描述没有给出。因此,我需要先确定“优秀正整数”的定义。通常,这类题目可能有特定的条件,例如数字的各位之和满足某种条件,或者是某种特殊的数(如回文数、质数等)。 假设“优秀正整数”可能有常见的几种定义,比如: 1. 各位数字之和为质数。 2. 数本身是某个数的平方或立方。 3. 数满足某种特定的排列组合条件。 4. 或者是题目中提到的某种特定规则,如分解因数后的某种特性。 由于用户没有提供具体描述,我需要做一些合理的假设。例如,可能题目要求找出满足各位数字之和为质数的正整数,或者类似的条件。但为了准确回答,我需要更多的信息。然而,用户可能无法提供更多细节,因此可能需要根据常见的类似题目进行推断。 假设题目定义为:一个正整数如果其各位数字之和是质数,则称为优秀正整数。那么问题可能是要求找出某个范围内的所有优秀正整数,或者判断一个数是否是优秀的。 接下来,我需要考虑如何用C++实现这一点。例如,判断一个数是否为优秀正整数的步骤可能包括: 1. 计算该数的各位数字之和。 2. 判断这个和是否为质数。 如果题目要求生成这样的数,可能需要遍历一定范围内的所有数,检查每个数是否符合条件。 现在,我需要编写相应的C++代码。首先,实现一个计算数字各位之和的函数: ```cpp int digitSum(int n) { int sum = 0; while (n > 0) { sum += n % 10; n /= 10; } return sum; } ``` 然后,实现一个质数判断函数: ```cpp bool isPrime(int num) { if (num <= 1) return false; if (num == 2) return true; if (num % 2 == 0) return false; for (int i = 3; i * i <= num; i += 2) { if (num % i == 0) return false; } return true; } ``` 结合这两个函数,判断一个数是否为优秀正整数: ```cpp bool isExcellent(int n) { return isPrime(digitSum(n)); } ``` 如果题目要求输出所有小于等于N的优秀正整数,主函数可以如下: ```cpp #include <iostream> using namespace std; int main() { int N; cin >> N; for (int i = 1; i <= N; ++i) { if (isExcellent(i)) { cout << i << " "; } } return 0; } ``` 不过,这可能只是其中一种可能的实现。但问题在于,用户提到的B3828可能具体有不同的条件,比如可能需要考虑其他因素,如数的因数分解等。例如,题目可能要求找出满足某些因数特性的数,如因数个数为质数,或者因数和是质数等。 如果用户的问题中的“优秀正整数”定义不同,代码实现也会不同。例如,若优秀正整数的定义是其本身是质数,并且反转后的数字也是质数,那么实现方式会不同。但根据常见的题目命名习惯,“优秀”可能更常与数位和有关联。 另外,考虑到用户提到的是华为OD机试的题库,可能需要参考相关题型。根据引用[^1],华为OD的机试题目可能涉及算法题,如排序、搜索、动态规划等。因此,可能需要考虑更复杂的条件,例如优秀正整数的定义涉及数位操作或其他算法。 如果没有具体的题目描述,可能需要用户进一步澄清。但考虑到用户可能无法提供更多信息,可能需要给出一个通用的解决方案,并说明可能的变种。 综上,我会提供一个基于数位和判断质数的C++代码实现,并指出可能的其他情况,建议用户根据具体题目要求调整条件。</think>根据常见编程题特征推测,B3828"优秀正整数"可能需要满足特定数位条件。以下是基于数位和质数判断的C++实现: ```cpp #include <iostream> #include <cmath> using namespace std; // 计算数字的各位和 int digitSum(int n) { int sum = 0; while (n > 0) { sum += n % 10; n /= 10; } return sum; } // 质数判断函数 bool isPrime(int num) { if (num <= 1) return false; if (num == 2) return true; if (num % 2 == 0) return false; for (int i = 3; i <= sqrt(num); i += 2) { if (num % i == 0) return false; } return true; } // 优秀数判断 bool isExcellent(int n) { return isPrime(digitSum(n)); } int main() { int N; cout << "输入上限N:"; cin >> N; for (int i = 1; i <= N; ++i) { if (isExcellent(i)) { cout << i << " "; } } return 0; } ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值