|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
int main()
{
int n,a[666]={0},j,k,i=0,t,nn;
scanf("%d ",&n);
nn=n;
while (nn>0)
{
scanf("%d ",&a[i]);
i++;
nn=nn-1;
}
这是我代码的前半段,第一个输入是求后面输入的个数,后面循环输入将值存储入数组。为什么读入失败了
本帖最后由 桃花飞舞 于 2022-9-23 17:14 编辑
具体的解法能将一下么?我没什么思路?我百度出来了思路但是不太懂
思路: 从最后一个数向前比较,找到第一个递增数,然后在该数后面的数中,找到比该数更小的一个数替换它的位置,然后剩余的数倒序排列即可。
比如测试样例中,一直找到62才出现递增,那么将6替换为已比较过的数中最接近它的5,然后剩余的数字倒序排列,所以是9766422
我根据上边的思路来解题并不难,只不过没有更多的数据来测试,我觉的上面思路有考虑不足的地方,还是想请楼主讲下思路。
- #include <stdio.h>
- int main()
- {
- long long num = 0,nn = 0,num_pre = 0,num_last = 0;
- int a[30]={0},j = 0,k = 1,i=0,idx = 0,tmp = 0,n = 0;
- scanf("%lld",&num);
- nn=num;
- while (nn > 0)
- {
- a[i] = nn % 10;
- nn = nn / 10;
- i++;
- }
- n = i - 1;
- while ( j < n )
- {
- if(a[j] < a[j+1])
- {
- break;
- }
- j++;
- }
- idx = j+1;
-
- for(i = 0; i < idx; i++ )
- {
- if(a[idx] > a[i])
- {
- tmp = a[idx];
- a[idx] = a[i];
- a[i] = tmp;
- break;
- }
- }
- for(i = n; i >= idx ; i--)
- {
- num_pre = num_pre*10 + a[i];
- }
-
- for(i = 0; i < idx; i++)
- {
- num_last = num_last * 10 + a[i];
- k = k*10;
- }
- printf("%lld\n",(num_pre*k + num_last));
- return 0;
- }
复制代码
|
|