pat 1005继续(3n+1)猜想 编译器 C(gcc)

输入格式:

每个测试输入包含 1 个测试用例,第 1 行给出一个正整数 K (<100),第 2 行给出 K 个互不相同的待验证的正整数 n (1<n≤100)的值,数字间用空格隔开。

输出格式:

每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用 1 个空格隔开,但一行中最后一个数字后没有空格。

经验

一开始提交第四个测试点不能通过,后来发现原因为m*3+1后忘了除2

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
	int K,n;
	int a[100][2];//存放输入的数n及flag
	scanf("%d",&K);
	for(int i=0;i<K;i++){
		scanf("%d",&n);
		a[i][0] = n;
		a[i][1] = 1;//将falg存放为1
	}
	
	for(int i=0;i<K;i++){
		if(a[i][1] == 1){
			int m = a[i][0];
			while(m != 1){
				if(m%2 == 0){
					m = m/2;
					for(int p = 0;p<K;p++)
						if(m == a[p][0])
							a[p][1] = 0;
				}
				else{
					m = (m*3+1)/2;
					for(int p = 0;p<K;p++)
						if(m == a[p][0])
							a[p][1] = 0;
				}
			}
		}
	}
	int b[100],j=0;
	for(int i=0;i<K;i++){
		if(a[i][1] == 1){
			b[j] = a[i][0];
			j++;	
		}
	}
	for(int i = 0;i<j;i++){
		for(int k = 0; k<i;k++){
			if(b[i]>b[k]){
				b[i] = b[i] + b[k];
				b[k] = b[i] - b[k];
				b[i] = b[i] - b[k];
			}
		}
	}
	for(int i =0;i<j-1;i++){
		printf("%d ",b[i]);
	}
	printf("%d",b[j-1]);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值