⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 删数.cpp

📁 using greedy tratage to solve the problem of Number Delete.
💻 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 + -