问题标题: 酷町堂:3825 有趣的排序大家来找错!

0
0
已解决
张天璨
张天璨
新手天翼
新手天翼
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
string a[20010];
int sum(string a){
	int s=0;
	for(int i=0;i<a.size();i++){
		s+=a[i]-'0';
	}
	return s;
}
bool cmp(string a,string b){
	if(sum(a)!=sum(b)) return sum(a)>sum(b);
	return a<b;
}
int main(){
	int n;
	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;
} 

我用这个代码提交,结果金色传说30分

大家来找错!

张天璨在2020-07-21 09:49:17追加了内容

顺便回答一下这个吧!回答的人悬赏!


1
已采纳
王子凡
王子凡
高级光能
高级光能

sum函数写错了

我是拿结构体写的

struct node{
    int s,num;
}a[20010];

我在结构体里定义了一个s,记录数位和

for (int i=1;i<=n;i++)
    {
        int t=a[i].num;
        cnt=0;
        while (t!=0)
        {
            int num=t%10;
            t/=10;
            cnt+=num;
        }
        a[i].s=cnt;
    }

然后cmp这样写就可以了

bool cmp(node a,node b)
{
    if (a.s!=b.s)
        return a.s>b.s;
    return a.num<b.num;
}

 

1
尤博扬
尤博扬
初级光能
初级光能

@张天璨  

  • int cnt=0;
  • while(a>0)
  • {
  • cnt=cnt+a%10;
  • a/=10;
  • }
  • return cnt;
  • 应是这样
  • 还有:所用变量都是int类型
  • 改一下
尤博扬在2020-07-22 10:13:15追加了内容

望采纳

0
我要回答