首页 > 试题广场 >

数字游戏

[编程题]数字游戏
  • 热度指数:122 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牛牛举办了一场数字游戏,有n个玩家参加这个游戏,游戏开始每个玩家选定一个数,然后将这个数写在纸上(十进制数,无前缀零),然后接下来对于每一个数字将其数位按照非递减顺序排列,得到新的数,新数的前缀零将被忽略。得到最大数字的玩家赢得这个游戏。

输入描述:
输入包括两行,第一行包括一个整数n(1 ≤ n ≤ 50),即玩家的人数
第二行n个整数x[i](0 ≤ x[i] ≤ 100000),即每个玩家写下的整数。


输出描述:
输出一个整数,表示赢得游戏的那个玩家获得的最大数字是多少。
示例1

输入

3
9638 8210 331

输出

3689
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int n;
    int res = -1;
    cin >> n;
    while (n--) {
        int x;
        int num[10];
        memset(num, 0, sizeof(num));
        cin >> x;
        while (x) {
            ++num[x%10];
            x /= 10;
        }
        int new_n = 0;
        for (int i = 1; i < 10; ++i) {
            //cout << i << " : " << num[i] << endl;
            for (int j = 0; j < num[i]; ++j) {
                new_n = new_n * 10 + i;
            }
        }
        if (new_n > res) res = new_n;
    }
    cout << res << endl;
}
发表于 2019-03-10 14:57:36 回复(0)
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a ,const void* b)
{ return *(int *)a-*(int *)b; }
int main()
{
    int n,i,j,k,max=0,beishu=1;
    scanf("%d", &n);
    int x[50];
    int y[50][6]={0};//二维数组初始化
    
    for(i=0;i<n;i++)
    {
        scanf("%d",&x[i]);
        for(j=0;(j<6)&&(x[i]!=0);j++)
        {
            y[i][j]=x[i]%10;//y[i][j]获取到x[i]的每一位数字
            x[i]=x[i]/10;
        }
        qsort(y[i],6,sizeof(int),cmp);//对y[i][j]升序排列
        
        for(k=5;(k>=0)&&(y[i][k]!=0);k--)//对y[i][j]去掉前缀0存入x[i]
        {
            x[i]=x[i]+y[i][k]*beishu;
            beishu=beishu*10 ;
        }
        beishu=1;
    
        if(max<x[i])//获取x[i]数组最大值
            max=x[i];
    }
 printf("%d\n",max);
 
    return 0;
}

发表于 2019-03-10 13:13:49 回复(0)