1.暑假,小民和弟弟一起玩数字接龙游戏。将n(2≤n≤20)个正整数A1...An(1≤Ai≤1000)任意次序排列首尾连接,拼接成一个新的整数;接龙而成的整数更大者获胜。请你帮助小民编写一个程序构造出最大的整数吧。
【Input】
输入共两行;第一行有一个整数,表示数字个数 n;第二行有 n 个整数,表示给出的 n 个整数 Ai。
【Output】 一个正整数,表示最大的整数。
Sample Input 1 】
3
13 312 343
【Sample Output 1】
34331213
#include <iostream>
#include <vector>
#include <iterator>
#include <string>
#include<algorithm>
using namespace std;
bool cmp(string i,string j)
{
return (i+j)>(j+i);//提供排序规则
}
/*
Sort(start,end,cmp)
参数
(1)start表示要排序数组的起始地址;
(2)end表示数组结束地址的下一位;
(3)cmp用于规定排序的方法,可不填,默认升序。
sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。
一般是直接对数组进行排序,例如对数组a[10]排序,sort(a,a+10)。而sort函数的强大之处在可与cmp函数结合使用,即排序方法的选择。
*/
int main()
{
vector<string> vec;
int num;
cin>>num;
for(int i = 0; i < num; ++i)
{
string temp;
cin>>temp;
vec.push_back(temp);
}
sort(vec.begin(),vec.end(),cmp);
for(vector<string>::iterator it = vec.begin(); it != vec.end(); ++it)
{
cout<<(*it);
}
cout<<endl;
return 0;
}
2. 小民家里养不少小兔子,他每天放学都会拿着一筐胡萝卜去喂它们。
已知小兔子i希望最少能得到gi克的胡萝卜,如果胡萝卜j的重量wj>=gi,小民就将胡萝卜j喂给小兔子i,小兔子才会满足。
请你帮助小民设计一个程序,计算出最多能满足多少只小兔子。
注:gi、wi为正整数,每只兔子只能喂1根胡萝卜。
【输入】
输入数据为3行。
第1行,为整数N(1<=N<=20)和M(1<=M<=100),以“空格”为分隔符;分别表示有N只兔子和有M根胡萝卜。
第2行,为N个整数gi,以“空格”为分隔符;分别表示每只兔子希望最少能得到重量为gi的胡萝卜。
第3行,为M个整数wi,以“空格”为分隔符;分别小时每根胡萝卜的重量。
【输出】
输出为1行。1个整数X,表示最多能满足X只兔子。
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <iostream>
/* 分孩子饼干或分兔子胡萝卜*/
using namespace std;
// g表示胃口 s表示饼干尺寸
// 需要 g[i]<=s[j]且是s中的最大值
// 时间复杂度O(n)
int findContentChildren(std::vector<int>& g, std::vector<int>& s) {
// 对两个列表进行排序
std::sort(g.begin(),g.end()); // sort 默认升序
std::sort(s.begin(),s.end());
unsigned int child = 0; //有多少孩子被满足
unsigned int cookie = 0; //有多少饼干被孩子满足
while(child < g.size() && cookie < s.size()){
if(g[child] <= s[cookie]){
child ++;
}
cookie ++;
}
return child;
}
// 测试结果
int main(){
std::vector<int> g; //孩子,即兔子的胃口满足重量值
std::vector<int> s; //饼干,即胡萝卜的重量
int N,M,i=0,gi; //N个兔子,M根胡萝卜
cin >> N >> M;
// cout << "N =" << N << ",M=" << M << endl;
for(i=0;i<N;i++)
{
cin >> gi;
g.push_back(gi);
}
for(i=0;i<M;i++)
{
cin >> gi;
s.push_back(gi);
}
int ans = findContentChildren(g,s);
printf("%d\n",ans);
return 0;
}