B1005 继续(3n+1)猜想 (25 分)

一、技术总结

  1. 一个是注意输出格式,也就是末尾没有空格,这个解决方法一般是使用一个计数,然后打印输出一个就减少一个。
  2. 就是在使用数组时,要注意段错误,也就是数组开辟的是否够大。
  3. 如果可以的话,可以多设置几个数组,用于清晰的记录,可以防止后面的代码冗余复杂。

二、参考代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
bool hashTable[10000] = {0};
bool cmp(int a, int b){
	return a > b;
}
int main(){
	int n,m,a[110];
	cin >> n;
	for(int i = 0; i < n; i++){
		cin >> a[i];
		m = a[i];
		while(m != 1){
			if(m % 2 == 1){
				m = (3*m + 1) / 2;
			}else{
				m = m / 2;
			}
			hashTable[m] = true;
		}
	} 
	int count = 0;
	for(int i = 0; i < n; i++){
		if(hashTable[a[i]] == false){
			count++;
		}
	}
	sort(a, a+n, cmp);
	for(int i = 0; i < n; i++){
		if(hashTable[a[i]] == false){
			cout << a[i];
			count--;
			if(count > 0) cout << " ";
		}
	}
	return 0;
}
posted @ 2019-11-07 22:02  睿晞  阅读(183)  评论(0编辑  收藏  举报