题目
题目大意
请问n个一位数能够组成的最小的n位整数是多少。
比如,n=3,3个整数为3、1、9,那么组成的最小整数是139。
比如,n=4,4个整数为2、8、0、6,那么组成的最小整数是2068。
输入情况
第一行为一个整数n(n<10)
第二行为n个一位数
输出情况
一行,包含一个组成的最小整数。
用例输入&输出
4
7 3 4 4
3447
题目分析
题目类型&知识点
这道题针对的是一维数组类型的题目。
分析概要
首先 对输入的数据进行保存
我们输入的是一个数字n表示第二行输入数字的多少
并且我们要记录第二行索要记录的数字。
所以我们可以先创建一个一维数组并且记录这些数字
#include<bits/stdc++.h>
//#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;//记录第一行的数字大小
int arr[a];
for(int i=0;i<a;i++) cin>>arr[i];
//后面代码先忽略
return 0;
}
接着 对数据进行处理
a.先将数组内的数据进行排序
我们要输出的数据是最小值
so 我们应该要将数据内的数字按小和大排序
这里我使用冒泡排序
即
for(int i=1;i<a;i++)
{
for(int j=1;j<a;j++)
{
if(arr[i-1]>arr[i])
{
int temp=arr[i];
arr[i]=arr[i-1];
arr[i-1]=temp;
}
}
}
b.除去0的可能性
当我们排好序时
题目中 有 2 0 6 8的输入 输出 则不是0268
如果有0则用比0大的最小数字来代替第一位
这里我用交换数组内数据的位置来实现程序
for(int i=0;i<a;i++)
{
if(arr[i]!=0)
{
int temp=arr[i];
arr[i]=arr[0];
arr[0]=temp;
break;
}
}
这里arr[i]!=0是为了实现找寻不为0的数字
接着我们就进行数字的交换
最后 进行数据输出
for(int i=0;i<a;i++) cout<<arr[i];
//for(auto x:arr) cout<<x;
程序呈现
#include<bits/stdc++.h>
//#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;//记录第一行的数字大小
int arr[a];
for(int i=0;i<a;i++) cin>>arr[i];
for(int i=1;i<a;i++)
{
for(int j=1;j<a;j++)
{
if(arr[i-1]>arr[i])
{
int temp=arr[i];
arr[i]=arr[i-1];
arr[i-1]=temp;
}
}
}
for(int i=0;i<a;i++)
{
if(arr[i]!=0)
{
int temp=arr[i];
arr[i]=arr[0];
arr[0]=temp;
break;
}
}
for(int i=0;i<a;i++) cout<<arr[i];
//for(auto x:arr) cout<<x;
return 0;
}