2019 Xidian MeteringTest-2番号の並べ替え

問題2

入力は2つの部分に分かれています。最初に桁数nを入力し、次に0〜1000のn個の数値を入力します。出力時は、加算、降順で並べ替えられます。数字が等しい場合は、n個の数字の大きさで昇順で並べ替えられます。

入力:
5
101 100 999 1234 110
出力:
999 27
1234 10
101 2
110 2
100 1
—————————————————————————————— ———————————

当初考えていた方法は出力に対応しておらず、各桁の加算とソートしかできませんでしたが、ソート後、元の数値と一致しないことがわかりました。

#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;

bool compare(int a, int b)
{
    
    
    return a > b;
}
int main()
{
    
    
    int n, a[10001], y[10001];
    int x, b, c, d, e;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
    
    
        cin>>a[i];
        x = a[i] / 10000;
        b = a[i] / 1000 % 10;
        c = a[i] / 100 % 10;
        d = a[i] / 10 % 10;
        e = a[i] % 10;
        y[i] = x + b + c + d + e;
        //cout<<x<<"-"<<b<<"-"<<c<<"-"<<d<<"-"<<e<<endl;
    }
    sort(y, y + n, compare);
    for(int i = 0; i < n; i++)
        cout<<a[i]<<" "<<y[i]<<endl;
    return 0;
}

改善:

#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
/* 
bool compare(int a, int b)
{
    return a > b;
}
*/
int main()
{
    
    
    int n, a[10001], y[10001];
    int x, b, c, d, e, v, m;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
    
    
        cin>>a[i];
        x = a[i] / 10000;
        b = a[i] / 1000 % 10;
        c = a[i] / 100 % 10;
        d = a[i] / 10 % 10;
        e = a[i] % 10;
        y[i] = x + b + c + d + e;
        //cout<<x<<"-"<<b<<"-"<<c<<"-"<<d<<"-"<<e<<endl;
    }
    for(int i = 0; i < n; i++)
    {
    
    
    	for(int j = 0; j < n; j++)
    	{
    
    
    		if((y[i] > y[j]) || (y[i] == y[j] && a[i] < a[j]))
    		{
    
    
    			v = a[i];
    			a[i] = a[j];
    			a[j] = v;
    			m = y[i];
    			y[i] = y[j];
    			y[j] = m;
			}
		}
	}
	for(int i = 0; i < n; i++)
	cout<<a[i]<<" "<<y[i]<<endl;
	return 0;
}

また、真ん中の部分は単純化されているようで、そのように書くのは少し面倒です。

#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;

int shu(int a)
{
    
    
    int sum = 0;
    while(a != 0)
    {
    
    
        sum = sum + a % 10;
        a = a / 10;
    }
    return sum;
}

int main()
{
    
    
    int n, a[10001], y[10001];
    int x, b, c, d, e, v, m;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
    
    
        cin>>a[i];
        y[i] = shu(a[i]);
    }
    for(int i = 0; i < n; i++)
    {
    
    
        for(int j = 0; j < n; j++)
        {
    
    
            if((y[i] > y[j]) || (y[i] == y[j] && a[i] < a[j]))
            {
    
    
                v = a[i];
                a[i] = a[j];
                a[j] = v;
                m = y[i];
                y[i] = y[j];
                y[j] = m;
            }
        }
    }
    for(int i = 0; i < n; i++)
        cout<<a[i]<<" "<<y[i]<<endl;
    return 0;
}

おすすめ

転載: blog.csdn.net/KO812605128/article/details/114382145