1005 继续(3n+1)猜想,C

肝了几个小时终于搞出来了,定义的各种变量,到后面搞得我自己都不太清楚哪些变量是干啥的,还好提交时一次通过,非常开心

#include <stdio.h>

int main()
{
	int a[100] = {0};		//用于储存输入的数字串
	int i=0,j=0,k,flag,e=0,n;
	int b[1000] = {0};		//b[1000]用于储存中间步骤产生的数字
	int c[100] = {0};		//c[100]用于储存最后要输出的数字

    scanf("%d",&n);
    while(n)  
    {
       scanf("%d",&a[i]);
	   k = a[i];
		while( k!=1 )		//该步骤是为了将待测试数字挨个进行“砍”,并将其中产生的数字储存于b[j]中
		{
			if(k % 2)    
				k = (3*k+1)/2;      
			else
				k = k/2;
			j = 0;flag = 1;
			while(b[j])
			{
				if(k == b[j])	{flag = 0; break;}	//判断b[j]中是否已储存与K相同的值,防止b[j]中存储过多重复数字
				j++;
			}
			if(flag)	b[j] = k;
		}  
		i++;
		n--;
	}

	i=0;
   while(a[i])			//该步骤是遍历原输入数字串,找出“关键数”,并储存于c[e]中
   {
	   j = 0;flag = 1;
	   while(b[j])
	   {
		if( a[i] == b[j])	{flag = 0;  break;} //如果a[i]中某数字属于b[i],那么它不是“关键数”
		j++;
	   }

	   if(flag)	
	   {	c[e]=a[i];	e++;}

	i++;
   }

   for(i=0; i<e-1; i++)		//将c[e]中数字按从大到小排序,冒泡排序法; i,j此时可以重新拿来用
	   for(j=i+1; j<e; j++)
		   if(c[i] < c[j])
		   {
			   k = c[i];
			   c[i] = c[j];
			   c[j] = k;
		   }

   while(c[n]) 				//之前算得n==0
   {
	   printf("%d",c[n]);
	   n++;
	   if(c[n])		printf(" ");	//注意最后一个数字后没有空格
   }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值