输入一个大于10的正整数n,从其中删除一个数字,使得剩下的数最大。例如,输入9187,应该删除1,剩下的987
#include<stdio.h>intmain(){longn;longa[8]={0};inti,j=0;scanf("%ld",&n);for(i=1;n>0;i+...
#include <stdio.h>
int main()
{
long n;
long a[8]={0};
int i,j=0;
scanf("%ld",&n);
for (i=1;n>0;i++)
{
a[i]=n % 10;
n/=10;
}
for (i--;i>1;i--)
if (a[i]>a[i-1]) printf("%ld",a[i]);
else if(j!=0) printf("%ld",a[i]);
else j=1;
if (j!=0) printf("%ld",a[0]);
return 0;
}
代码对吗 展开
int main()
{
long n;
long a[8]={0};
int i,j=0;
scanf("%ld",&n);
for (i=1;n>0;i++)
{
a[i]=n % 10;
n/=10;
}
for (i--;i>1;i--)
if (a[i]>a[i-1]) printf("%ld",a[i]);
else if(j!=0) printf("%ld",a[i]);
else j=1;
if (j!=0) printf("%ld",a[0]);
return 0;
}
代码对吗 展开
2个回答
展开全部
1 C语言中 数组中 0为起始位
2 数组只有8位,如果超过8位会溢出
3 j 请问在 定义赋初值之后 还有没有赋值过。
总体的思路是,,,将 输入数字中的每个数字提取出来,
将其中最小的 数字 识别出来
依次按位 输出 剔除最小的数字。
当然,每个人都有每个人的思路,但 你程序后一个循环式没有道理的。 可以在第一个循环的时候将 最小的数字找出来。 在第二个循环的时候按照数组的排列倒序 按位,也就是 最后一个是 要乘以 输入n的位数的 -1 个位数 然后后面的也是同样的方法,但到了最小的那个数的时候就跳过,进行下一次输出就行了。 不知道 是不是正确的。 时间有限。仅供参考。
谢谢
2 数组只有8位,如果超过8位会溢出
3 j 请问在 定义赋初值之后 还有没有赋值过。
总体的思路是,,,将 输入数字中的每个数字提取出来,
将其中最小的 数字 识别出来
依次按位 输出 剔除最小的数字。
当然,每个人都有每个人的思路,但 你程序后一个循环式没有道理的。 可以在第一个循环的时候将 最小的数字找出来。 在第二个循环的时候按照数组的排列倒序 按位,也就是 最后一个是 要乘以 输入n的位数的 -1 个位数 然后后面的也是同样的方法,但到了最小的那个数的时候就跳过,进行下一次输出就行了。 不知道 是不是正确的。 时间有限。仅供参考。
谢谢
展开全部
不对,C语言下标从0开始,你的程序a[0]一直都是初值0,我改了下你试试
#include <stdio.h>
int main()
{
long n;
long a[8]={0};
int i,j=0;
scanf("%ld",&n);
for (i=0;n>0;i++)
{
a[i]=n % 10;
n/=10;
}
for (i--;i>0;i--)
{ if (a[i]>a[i-1]) printf("%ld",a[i]);
else if(j!=0) printf("%ld",a[i]);
else j=1;
}
if (j!=0) printf("%ld\n",a[0]);
return 0;
}
#include <stdio.h>
int main()
{
long n;
long a[8]={0};
int i,j=0;
scanf("%ld",&n);
for (i=0;n>0;i++)
{
a[i]=n % 10;
n/=10;
}
for (i--;i>0;i--)
{ if (a[i]>a[i-1]) printf("%ld",a[i]);
else if(j!=0) printf("%ld",a[i]);
else j=1;
}
if (j!=0) printf("%ld\n",a[0]);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询