数学法:
原数为 a1a2……an;
从a1开始向后找到第一个ai比ai+1大的,删掉ai;
若找不到,删掉a1;
程序:
只用了一次循环,哈哈
#include
int main()
{
char str[200];
printf( "Input a number : " );
scanf( "%s", str );
int flag = 0; /* 记录是否找到了要被删掉的数 */
char *p = str;
while ( *p ) /* 当*p != '\0'时 */
{
if ( flag ) /* 找到了要被删掉的数,则一次打印剩下的数 */
{
printf( "%s\n", p );
return 0;
}
else if ( *p <= *(p+1) ) /* 找到被删掉的数前,挨个打印 */
{
printf( "%c", *p );
}
else if ( *(p+1) ) /* 如果*(p+1)!='\0'的话,则找到了被删掉的数 */
{
flag = 1;
}
++p;
}
if ( !flag ) /* 如果一遍循环并没有找到要被删掉的数 */
{
printf( "%c", *(p-1) ); /* 因为上面的while只会打印n-1个数,所以要补上最后一个数 */
printf( "\r \n" ); /* 用空格将应该删掉的第一个数覆盖掉,比较偷懒的方法 */
}
return 0;
}
分析问题先
这个问题主要是解决的是比较字符的字符码大小的问题
为什么这样说呢?
删除一为最小的意思我们就可以看出来
比如输入
1234567890
删除9了 其实就是 删除的这位数一定要大于前面所有的数 并大于其后面的那位数
根据这个就可以确定你删除那个
main()
{
char str[200],temp;
int i,j;
printf("enter you number!");
scanf("%s",str);
for(i=0;i<200-1;i++){
if(a[i]>a[i+1])
breack;
}
for(j=i;j<200;j++)
{
a[j]=a[j+1];
}
a[200]='\0';
printf("\n%s",a);/*不知道这能不能行*/
}
给你一个一定不会出错的程序,也挺简单的,看不懂给我留言。
#include
#include
main()
{
int c=0,d,p;
char t[200];
while(c<200)
{
t[c]=getch();
if(t[c]==13) break;
if(t[c]<'0'||t[c]>'9')
{printf("input err!");return ;}
printf("%c",t[c]);
++c;
}
printf("\n");
p=0;
for(d=0;d
{
p=d;
break;
}
else if(t[d]>t[p])
p=d;
for(d=0;d
printf("%c",t[d]);
}
肯定正确
#include
void main()
{
int x,i,j,a[200],n;
scanf("%d",&x);
for(j=0;;j++)
{
a[j]=x%10;
x/=10;
if(x==0)break;
}
for(i=j;i>=1;i--)
{
if(a[i]>a[i-1])
{
for(n=i;n>=1;n--)
{
a[n]=a[n-1];
}
break;
}
}
for(i=j;i>0;i--)
{
printf("%d",a[i]);
}
}
调试正确了
#include "stdio.h"
#include "string.h"
char * Del(char a[])
{
int n,i,t;
n=strlen(a);
if(a[0]=='9')
{
for(i=1;i
a[n-1]='\0';
}
else
{
for(i=1;i
if(a[i]>a[i-1]&&a[i]>a[i+1])
{
for(t=i;t
a[n-1]='\0';
}
}
}
return a;
}
void main()
{
char a[256];
int n,i;
printf("请输入一个数:\n");
scanf("%s",&a);
n=strlen(a);
a[n+1]='\0';
Del(a);
printf("%s\n",a);
}
思路:如果第一位数是9,删除它;否则,删除那个比它前面的数大邮比它后面数大的那个数。
注:程序运行通过.
读数的时候保存到个char a[200] 的数组里面,然后根据'0' 来分段
定义char *start ,*end ;
1。如果最前面一段长度>=m ,那么整理这一段
2。如果当前一段长度<= m, 那么这段一定被消掉,printf出‘0’,m -= end-start ,移动start end 到第二段,重复,直至符合1。
定义一个整理段的函数:在start ,end 段内没有0,且m
不知道思路有没有错。。。。复杂度怎么样
My_Printf(char *start ,char *end ,int m)
{
char * temp = start ;
while(m>0 && temp!= end)
if( *temp > *(temp +1))
{
*temp-- ='0';
m--
}
while(m>0)
if( *temp !='0')
{ *temp-- ='0';
m-- ;
}
temp = start ;
while( temp != end && *temp !='0')
printf("%c",*temp++);
printf("%s",end);
}