PAT乙級 1005繼續3n+1猜想(C語言)

#include <stdio.h>
#include <stdlib.h>

void bubbleSort(int *p, int n)
{
	int i, j, tmp;
	for(i = 0; i < n; i++)
	{
		for(j = 0; j < n - i -1; j++)
		{
			if(p[j] < p[j+1])
			{
				tmp = p[j];
				p[j] = p[j+1];
				p[j+1] = tmp;
			}
		}
	}
}

int main()
{	
	int n, i, j, tmp;
	int *arr = NULL, *flag = NULL, *ans;
	scanf("%d", &n);
	arr = (int *)malloc(n * sizeof(int));
	flag = (int *)malloc(n * sizeof(int));
	ans = (int *)malloc(n * sizeof(int));
	for(i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
		flag[i] = 0;
	}
	
	for(i = 0; i < n; i++)
	{
		tmp = arr[i];
		while(tmp != 1)
		{
			if(tmp & 1)
			{
				tmp = (tmp*3 + 1) / 2;
			}
			else
			{
				tmp /= 2;
			}
			for(j = 0; j < n; j++)
			{
				if(tmp == arr[j])
				{
					flag[j] = 1;
				}
			}
		}
	}
	j = 0;
	for(i = 0; i < n; i++)
	{
		if(!flag[i])
		{
			ans[j++] = arr[i];
		}
	}
	bubbleSort(ans, j);
	for(i = 0; i < j; i++)
	{
		if(i == j-1)
		{
			printf("%d\n",ans[i]);	
		}
		else
		{
			printf("%d ",ans[i]);
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章