遍历数组每个数的xxx定律,若数组中存在覆盖数,则将其置0,遍历完成数组后,数组中的非0数即为关键数,逆向输出即可。
#include <iostream>
using namespace std;
void key(int *a, int n){
for (int i = 0; i < n; i++){
int temp = a[i];
while (temp > 1){
if (temp % 2 == 0){
temp = temp / 2;
for (int j = 0; j < n; j++){
if(a[j] == temp) a[j] =0; //将覆盖数置0,非0即为关键数
}
}
else{
temp = (3 * temp + 1) / 2;
for (int j = 0; j < n; j++){
if(a[j] == temp) a[j] =0; //将覆盖数置0,非0即为关键数
}
}
}
}
for (int i = n-1; i >= 0; i--){//输入顺序的逆序输出
if (a[i] != 0)
cout<<a[i]<<" ";
}
}
int main() {
int n;
while (cin >> n && n != 0) { // 注意 while 处理多个 case
int a[n];
for (int i = 0; i < n; i++){ //输入序列
cin >> a[i];
}
key(a,n);
}
}
// 64 位输出请用 printf("%lld")

京公网安备 11010502036488号