• 华为笔试——C++消重输出


    题目:消重输出

    题目介绍:

    输入一个正整数,给出消除重复数字以后最大的整数,注意需要考虑长整数。

    例:

    输入:988274320

    输出:9874320

    题目分析:这个结果的实现需要两个步骤:消重和排序。第一步,消重。先用string 和char 将数字分别储存进char 数组,然后从左边第一个字符开始逐个向右边比较,如果有相同的字符就将左边的置换成 ‘a’ ,这样多次次循环过后988274320就变成了9a8a74320,因为是向右比较且只变换左边字符,因此a 不会重复。第二步,排序。就是循环比较,大的字符向右靠即可。

    代码:

     1 #include <iostream>
     2 #include <string>
     3 #include <math.h>
     4 #include <conio.h>
     5 using namespace std;
     6 int main()
     7 {
     8     int size;
     9     cout << "请输入位数:" << endl;
    10     cin >> size;
    11     int i = 0,j = 0,n = 0;
    12     int count = 0;
    13     long result = 0;
    14     char c;
    15     char *p = new char[size];
    16     cout << "请输入" << size << "位正整数" << endl;
    17     while ((c = _getch()) != '
    ')
    18     {
    19         if (c >= '0'&&c <= '9')
    20         {
    21             p[count] = c;
    22             cout << c;
    23             count++;//字符形式存储在数组里
    24         }
    25     }
    26     for (i = 0; i < size; i++)
    27     {
    28         for (j = 0; j < size; j++)
    29         {
    30             if (p[i] == p[j] && i < j)
    31             {
    32                 p[i] = 'a';//重复的数字,左边的变成a
    33                 n++;//每有一个重复的,n++
    34             }
    35         }
    36     }
    37     cout << endl;
    38     for (i = 0; i < size;i++)
    39     {
    40         cout << p[i];
    41     }
    42     cout << endl;
    43     for (i = 0; i < size; i++)
    44     {
    45         for (j = 0; j < size; j++)
    46         {
    47             if (p[i] < p[j] && i < j)
    48             {
    49                 count = p[i];
    50                 p[i] = p[j];
    51                 p[j] = count;//数字大的排前面
    52             }
    53         }
    54     }
    55     cout << n << endl;
    56     for (i = 0; i < size; i++)
    57     {
    58         cout << p[i];
    59     }
    60     cout << endl;
    61     for (i = 0; i < size; i++)
    62     {
    63         if (i >= n)//输出除了a之外的数字
    64         {
    65             cout << p[i];
    66             result += (int(p[i])-48) * int(pow(10, size - i - 1));//转换成正整数
    67         }
    68     }
    69     cout << endl << result << endl;
    70     return 0;
    71 }

    结果:

    其中输入位数这一步可用string 与 char 的strcpy 省去。

  • 相关阅读:
    HDU1287+枚举
    HDU1303+水
    HDU1286+线性筛素数
    HDU1293+Java+大整数
    POJ1992+简单DP
    三种Cache写入方式原理简介
    Hadoop分布式文件系统:架构和设计要点 转
    GFS, HDFS, Blob File System架构对比转
    python
    Cassandra,Mongodb,CouchDB,Redis,Riak,HBase比较转
  • 原文地址:https://www.cnblogs.com/ljy1227476113/p/9610800.html
Copyright © 2020-2023  润新知