📄 删数.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
bool* del; // del 数组表示某数是否已被删除
int length; // 为待删数字总长度 ...
char num[256]; // 存放待删除数字,最大长度256
int k; // 为欲删除的个数
void read_file();
int next( int );
void greedy_del();
void write_file();
int main() // ....... main entrance .....
{
read_file();
greedy_del();
write_file();
getchar();
return 0;
}
////
void read_file()
{
FILE* fp; // 文件读取模块
if( (fp=fopen("删数.in","r")) == NULL )
{
printf( "FILE OPEN ERROR !!!\n" );
getchar();
exit( 0 );
}
fgets( num,256,fp );
length = strlen(num) - 1;
fscanf( fp,"%d",&k );
fclose(fp); // 关闭文件
}
///
void write_file() // 写文件模块
{
FILE* fp;
if( (fp=fopen("删数.out","w")) == NULL )
{
printf( "OPEN FILE TO WRITE EROOR" );
getchar();
exit( 0 );
}
printf( "\n result: ");
for( int z=0;z<length;z++ )
{
if( del[z] == true )
continue;
fprintf( fp,"%c",num[z] );
printf( "%c",num[z] );
}
fclose( fp );
printf( "\n");
}
///
void greedy_del()
{
if( k >= length ) // 判断 k 是否过大 ..
{
printf( " k = %d ,length = %d ,k is much too big !\n",k,length );
getchar();
exit( 0 );
}
del = new bool[ length ]; // del[i] 为true,表示已删除
memset( del,0,sizeof(bool)*length ); // initial...
for( int i=0;i<k;i++ )
{ printf( "\n-----------------------------------------\n开始删除第 %d 个数 \n",i+1 );
for( int j=next(-1);j<length;j = next(j) )
{ //getchar();
if( !next(j) ) // 若已经到了串尾,则删除之
{
del[ j ] = true; printf( " del[ %3d ] 设置为 true ,%d 被删除\n",j,num[j]-48 );
break;
}
if( num[j] > num[next(j)] )
{
del[j] = true; printf( " del[ %3d ] 设置为 true ,%d 被删除\n",j,num[j]-48 );
break;
}
}
}
}
///
int next( int jj )
{
while( jj++ < length )
{
if( del[jj] == false )
return jj;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -