太太太六六六六了
题目描述:
小畅非常喜欢数字6,他平时口头禅就是“六六六”。
小畅对一些数字作如下排序:包含数字“6”多的排在前面,如果两个数包含一样多的“6”,则 数字大的排在前面。
你知道他最后把数字们排成什么样子了吗?
输入格式:
第一行一个整数n(1<=n<=100000)
第二行n个整数,每个整数不超过100000。
对于30%的数据,1<=n<=1000。
对于100%的数据,1<=n=100000。
输出格式:
一行,输出排序后的n个数,相邻数字用空格' '隔开。
样例输入:
5 12345 66666 23 66 1926
样例输出:
66666 66 1926 12345 23
时间限制: 1000ms
空间限制: 256MB
答案:
#include<bits/stdc++.h>
using namespace std;
int a[100100],n;
int cal6(int x)
{
int sum=0;
while(x) {
if(x%10==6) sum++;
x/=10;
}
return sum;
}
bool cmp(int x,int y)
{
int x6=cal6(x);
int y6=cal6(y);
if(x6!=y6) return x6>y6;
else return x>y;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)cout<<a[i]<<" ";
return 0;
}
就介样了。