codeup 100000600: C语言-数字交换

这道题早晨解决时候卡死在答案只能正确百份之五十,午觉醒来举出反例,想到了还有百分之五十如何解决。

#include <cstdio>
#include <string>
#include <queue> 
using namespace std;
typedef long long LL;
queue< LL >que;
const int n=10;					//数字个数 

void duqu();
void chuli();
void shuchu(); 

int main(){
	duqu();				
	chuli();
	shuchu();
	return 0;
}

void duqu(){
	LL a;
	for(int i = 0; i < n; i++){
		scanf("%ld", &a);
		que.push(a);
	} 
	
}


void chuli(){
	if (que.empty()==true) return;
	LL max=que.front(), min=que.front(), first=que.front(), last=que.back();
	LL a = 0;
	for(int i = 0; i < n; i++){
		a=que.front();					
		que.pop();						//不能用 a = que.pop();   因为 que.pop()的返回值为空 
		max = a>max ? a:max;
		min = a<min ? a:min;
		que.push(a);
	} 									 
	for(int i = 0; i < n; i++){
		a=que.front();
		que.pop();
		if(i == 0)			que.push(min);
		else{
			if(a == min)	que.push(first);
			else 			que.push(a);
		}
	}												//将其中最小的数与第一个数对换 
	for(int i = 0; i < n; i++){
		a=que.front();
		que.pop();
		 if(i == n-1) 		que.push(max);
		else{
			if(a == max) 	que.push(last);
			else 			que.push(a);
		}											//把最大的数与最后一个数对换 
/*		switch (i){
			case 0:		que.push(max);
						break;
			case (n-1):	que.push(min);			
						break;
			default:	if(a == max) que.push(last);
						else if(a == min)	que.push(first);
						else que.push(a);
		};	*/											//本人一开始使用的是switch,只能真确百分之五十,会导致交换的两步相互冲突,
														//要保证不冲突就任意一步交换单独循环一次。注:case(n)里的n必须为常量						
	} 	
}


void shuchu(){
	if (que.empty()) return;
	LL a = 0;
	for(int i = 0; i < n; i++){
		a=que.front();
		printf("%ld ",a);
		que.pop();
	} 	
}

还请大家多多指出代码冗余之处以及用queue解决的新思路。
转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值