xxxx_k 2021-11-10 21:29 采纳率: 50%
浏览 115
已结题

C++中一道关于zzj数的题目

对于一个数字n,我们必须采取一次操作: 交换其相邻的两位。
经过交换后得到的最大的数为zzj数。
聪明的你看到这里一定知道你要做什么了:,
输入
给定一个数字n。

数据范围: 10 <= n <= 1e8

输出
输出其zzj数。

样例输入 Copy
19260817
样例输出 Copy
91260817

我有两个问题
1.怎么获取一个字符串中字符的个数
2.交换并判断后没有输出值

求帮忙解答一下可以提供一下思路和代码吗

  • 写回答

2条回答 默认 最新

  • 关注

    一个取巧的方法是直接以字符串方式读取输入的数字,从字符串开头两两字符比较。
    找到前面字符小于后面字符就将两个字符交换位置,并结束循环,输出字符串。
    由于题目要求必须采取一次交换操作,到最后两个字符时必须交换

    你题目的解答代码如下:

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        int n,i;
        char s[100],t;
        scanf("%s", s);
        int len = strlen(s);
        for (i = 0; i < len-1; i++)
        {
            if(s[i] < s[i+1] || i == len-2)//到最后两个字符时必须交换
            {
                t = s[i];
                s[i] = s[i+1];
                s[i+1] = t;
                break;
            }
        }
        printf("%s",s);
        return 0;
    }
    

    如有帮助,望采纳!谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月26日
  • 已采纳回答 11月18日
  • 创建了问题 11月10日