蓝桥杯:整数删除

// 蓝桥杯整数删除.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#define MAX 100
void findmin(int a[],int n,int& pos)
{
	int min=a[0];pos=0;//pos=0我开始忘了,特别注意边界
	for(int i=1;i<n;i++)
	{
		if(min>a[i])//找到3,2,1,7,1,找到第一个1
		{
			min=a[i];
			pos=i;
		}
	}

}


int main(int argc, char* argv[])
{
	int a[5]={1,4,2,8,7};

//	int a[5]={5,2,8,7,9};

//	int a[5]={8,2,5,7,9};

	int m=3;
	int pos=0;//初始化
	int afterpos;

	for(int k=1;k<4;k++)
	{
		findmin(a,5,pos);//从数组0号单元,找最小值
	//	printf("%d\n",pos);
	
		if(pos==0)
		{
			for(int k=1;k<5;k++)
			{
				if(a[k]==MAX);
				else
				{
					break;//第k个数不是MAX
				}
			}
			a[k]=a[pos]+a[k];
			a[pos]=MAX;
		//	thefirst(a,5,pos);
		}
		else
		{
					int tail,head;

					//找出a[pos]之前第一个不是MAX的值
					for(tail=pos-1;tail>=0;tail--)
					{
						if(a[tail]==MAX)
							;
						else
							break;
					}
					int pretemp;
					if(tail>=0)
					{
						pretemp=a[tail];
					}
					else
						pretemp=MAX;


					//找出a[pos]之后第一个不是MAX的值
					
					for(head=pos+1;head<5;head++)
					{
						if(a[head]==MAX)
							;
						else
							break;
					}
					
					int temp;
					if(head==5)
					{
						temp=MAX;
					}
					else
						temp=a[head];


					//比较最小值,前面与后面的相邻值,找到相邻值中较小的那个
					if(pretemp!=MAX)
					{
						a[tail]=a[tail]+a[pos];
						
					}
					if(temp!=MAX)
					{
						a[head]=a[head]+a[pos];
						
					}

					a[pos]=MAX;
		
		}
		for(int g=0;g<5;g++)//test
		{
			printf("%d    ",a[g]);
		}
		printf("\n");


	}//for(k)
	return 0;
}

不好好审题!!!!!导致一直在错

给定一个长度为 N 的整数数列:A1, A2, ... , AN。你要重复以下操作 K 次:
每次选择数列中最小的整数(如果最小值不止一个,选择最靠前的),将其删除。
并把与它相邻的整数加上被删除的数值。(这个条件我一开始审题不清)
输出 K 次操作后的序列。

 

 

删除我采用特殊值覆盖

关于输入,我直接给定了

知识点总结:

(1)记录最小值及位置,这里是数组;;;在我的csdn博客上链式存储的简单选择排序,也可记录最小值节点的指针

(2)学会分析不同的情况:pos=0时

pos!=0时,找它前面不被覆盖的最近的相邻值--------找它后面不被覆盖的最近的相邻值

	//比较最小值,前面与后面的相邻值,找到相邻值中较小的那个
					if(pretemp!=MAX)
					{
						a[tail]=a[tail]+a[pos];
						
					}
					if(temp!=MAX)
					{
						a[head]=a[head]+a[pos];
						
					}

					a[pos]=MAX;

 (3)删除我采用特殊值覆盖a[pos]=MAX

(4)没看清题意,就去做题

(5)写循环程序,先写最内层的循环因为它是最基本的功能

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值