1005 继续(3n+1)猜想

简介: 1005 继续(3n+1)猜想

题目描述

点击直达题目链接

解题思路

两个思路:1.先排序,再剔除验证时重复的。2.先剔除验证时重复的,再排序。

剔除的规则是:除本身外,验证过程中发现相等的标记为0。

具体实现看代码

代码实现(以思路1为例)(本次以快排的方式实现

快速排序直达链接

#include <stdio.h>
#include <stdlib.h>
//快排,看不懂的上面有链接
void quick_sort(int* arr,int left,int right)
{
  int temp = arr[left];
  int a = left;
  int b = right;
  if (a >= b)
    return;
  while (a<b)
  {
    while (arr[b] <= temp&& a < b)
      b--;
    while (arr[a] >= temp && a < b)
      a++;
    //交换
    int t = arr[a];
    arr[a] = arr[b];
    arr[b] = t;
  }
  arr[left] = arr[a];
  arr[a] = temp;
  quick_sort(arr, left, a-1);
  quick_sort(arr, b+1, right);
}

void delete(int* arr,int n)
{
  int i = 0,j=0;
  for (i=0;i<n;i++)
  {
    int temp = arr[i];
    while (temp != 1&&temp)//保证这个数不是0
    {
      if (temp % 2 == 0)
        temp /= 2;
      else
        temp = (temp* 3 + 1) / 2;
      for (j = 0; j < n; j++)
      {
        if (arr[j] == temp)
          arr[j] = 0;
      }
    }
  }
}
int main()
{
  int n;
  scanf("%d", &n);
  int* arr = (int*)malloc(n * sizeof(int));
  int i = 0;
  for (i=0;i<n;i++)
  {
    scanf("%d", arr + i);
  }
  //排序
  quick_sort(arr, 0, n - 1);
  //删除重复的
  delete(arr,n);
  //确定剩余几个数,目的是控制最后一个不打印空格
  int b = 0;
  for (i = 0; i < n; i++)
  {
    if (arr[i] == 0)
      b++;
  }
  b = n - b;
  //打印
  for (i=0;i<n;i++)
  {
    if (arr[i] != 0)
    {
      printf("%d", arr[i]);
      if (b-1)
      {
        printf(" ");
        b--;
      }
    }
  }
  free(arr);
  arr = NULL;
  return 0;
}

相关文章
|
6月前
|
测试技术
PAT(乙级) 1005 继续(3n+1)猜想 (25)
PAT(乙级) 1005 继续(3n+1)猜想 (25)
|
C语言
近期一系列个人做题反复记不住以及思路不清晰问题的总结
近期一系列个人做题反复记不住以及思路不清晰问题的总结
52 0
|
Java
hdu1279 验证角谷猜想
hdu1279 验证角谷猜想
59 0
C真的不难学,不信就看下我关于循环的理解
C真的不难学,不信就看下我关于循环的理解
|
Apache 云计算 开发者
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!(1)
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!
166 0
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!(1)
|
测试技术
PAT乙级1005.继续(3n+1)猜想(25分)
PAT乙级1005.继续(3n+1)猜想(25分)
90 0
|
机器学习/深度学习 测试技术
PAT乙级1001 害死人不偿命的(3n+1)猜想 (15分)
PAT乙级1001 害死人不偿命的(3n+1)猜想 (15分)
90 0
|
测试技术
1005 继续(3n+1)猜想 (25 分)
1005 继续(3n+1)猜想 (25 分)
94 0
|
测试技术
1001 害死人不偿命的(3n+1)猜想 (15 分)
1001 害死人不偿命的(3n+1)猜想 (15 分)
69 0