设有n个正整数,将它们联接成一排,组成一个最小的多位整数
2012-09-11 12:53
423 查看
设有n个正整数,将它们联接成一排,组成一个最小的多位整数。
程序输入:n个数
程序输出:联接成的多位数
例如:
n=2时,2个整数32,321连接成的最小整数为:32132,
n=4时,4个整数55,31,312, 33 联接成的最小整数为:312313355
[题目要求]
1. 给出伪代码即可,请给出对应的文字说明,并使用上面给出的例子试验你的算
法。
2. 给出算法的时间空间复杂度。
3. 证明你的算法。(非常重要)
写个简单的情况算法:对于 输入的数位数 小于等于3位算法
#include<iostream>
#include<string.h>
#include<string>
#include<vector>
#include <algorithm>
using namespace std;
bool cmp(string x,string y)
{
const char *str1=x.c_str();
const char *str2=y.c_str();
if (*str1!=*str2) return *str1<*str2;
str1++;str2++;
if (*str1!=*str2) return *str1<*str2;
str1++;str2++;
if (*str1<*str2) return *str1>*str2;
// return x>y;
}
int main()
{
int count=0;
vector<string> v;
int a[]={55,31,312,33};
// char *str[100];
// string str[100];
char str[100];
for(int i=0;i<sizeof(a)/sizeof(int);i++)
{
itoa(a[i],str,10);
v.push_back(str);
}
sort(v.begin(),v.end(),cmp);
vector<string>::iterator it;
for(it=v.begin();it!=v.end();it++)
count++;
for (int k=0;k<count;k++)
{
cout<<v[k]<<endl;
}
for(int j=1;j<count;j++)
{
v[0].append(v[j]);
}
int result=atoi(v[0].c_str());
cout<<"结果"<<result<<endl;
return 0;
}
主要思想:把整数变成字符串,然后插入vector中,使用sort算法排序,自定义排序方式,即可!
程序输入:n个数
程序输出:联接成的多位数
例如:
n=2时,2个整数32,321连接成的最小整数为:32132,
n=4时,4个整数55,31,312, 33 联接成的最小整数为:312313355
[题目要求]
1. 给出伪代码即可,请给出对应的文字说明,并使用上面给出的例子试验你的算
法。
2. 给出算法的时间空间复杂度。
3. 证明你的算法。(非常重要)
写个简单的情况算法:对于 输入的数位数 小于等于3位算法
#include<iostream>
#include<string.h>
#include<string>
#include<vector>
#include <algorithm>
using namespace std;
bool cmp(string x,string y)
{
const char *str1=x.c_str();
const char *str2=y.c_str();
if (*str1!=*str2) return *str1<*str2;
str1++;str2++;
if (*str1!=*str2) return *str1<*str2;
str1++;str2++;
if (*str1<*str2) return *str1>*str2;
// return x>y;
}
int main()
{
int count=0;
vector<string> v;
int a[]={55,31,312,33};
// char *str[100];
// string str[100];
char str[100];
for(int i=0;i<sizeof(a)/sizeof(int);i++)
{
itoa(a[i],str,10);
v.push_back(str);
}
sort(v.begin(),v.end(),cmp);
vector<string>::iterator it;
for(it=v.begin();it!=v.end();it++)
count++;
for (int k=0;k<count;k++)
{
cout<<v[k]<<endl;
}
for(int j=1;j<count;j++)
{
v[0].append(v[j]);
}
int result=atoi(v[0].c_str());
cout<<"结果"<<result<<endl;
return 0;
}
主要思想:把整数变成字符串,然后插入vector中,使用sort算法排序,自定义排序方式,即可!
相关文章推荐
- java题: 设有n个正整数,将它们联接成一排,组成一个最大的多位整数。例如:N=3时,3个整数13、312、343联成的最大整数为:34331213;
- n个正整数,联接成一排,组成一个最大(最小)的多位整数 python
- n个正整数联接成一排,组成一个最小的多位整数
- n个正整数,联接成一排,组成一个最小(最大)的多位整数
- n个正整数联接成一排,组成一个最小的多位整数
- 设有n个正整数,将他们连接成一排,组成一个最小的多位整数
- 设有n个正整数,将他们连接成一排,组成一个最大的多位整数
- 设有n个正整数 (n<=20), 将它们连接成一排, 组成一个最大的多位整数
- 设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
- 设有n个正整数,将他们连接成一排,组成一个最大的多位整数
- Java实现:n个正整数,将它们连接成一排,组成一个最大的多位整数。(输入:n(n个整数),依次输入n个整数)
- 设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数
- 求n个正整数连接成一排,组成一个最大的多位整数
- Problem Description 求n个数的最小公倍数。 Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。 Output 为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。 Sample
- 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。例如,a=13243221,k=5,输出:12
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- 输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对所给的n和s,寻找一种方案使得剩下的数字组成的新数最小。
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- 陈利人 面试题 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。