首页 > 试题广场 >

简单的变换

[编程题]简单的变换
  • 热度指数:1307 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给你一个正整数n,重复进行以下操作:
1.如果n是奇数,令
2.如果n是偶数,令
重复上述直至n=0停止,请输出进行操作的次数,如果n永远无法变成零,输出-1

示例1

输入

2

输出

-1

说明

1:2->1(2/2=1)
2:1->-2(1-3=-2)
3:-2->-1((-2)/2=(-1))
4.-1->-4(-1-3=-4)
5.-4->-2((-4)/2=(-2))
6.-2->-1((-2)/2=(-1))
.......开始进入第三步操作到第五步操作的循环,n永远无法等于0,所以返回-1。
示例2

输入

9

输出

3

说明

1.9->6(9-3=6)
2.6->3(6/2=3)
3.3->0(3-3=0)
三步操作后n变为0,所以返回3。

备注:
对于的数据,
对于的数据,
请返回最少操作数或者-1
头像 heyJulian
发表于 2020-08-14 16:38:11
暴力出所有的可能集合,再与要求的限制作比较。最终求出能组成的新集合数量。 有n个元素,每个元素都有取与不取的两种可能,所以应该是2^n个. 因为n<=20,故至多有10^6个集合,我们可以采用暴力搜索。 因为要遍历出所有的取值情况,我们使用回溯来解决此类问题。 展开全文
头像 heyJulian
发表于 2020-08-14 14:24:35
新建一个数组res,用于保存结果。 新建一个pos下标,用于指向数组res的最新元素的位置。 循环遍历一次输入数组str:     1.当res的第pos个元素和str的第i个元素都等于1,删除res的第pos个元素 并pos减一;   & 展开全文
头像 未来0116
发表于 2021-10-06 10:07:58
一.题目描述 NC638简单的变换 给一个正整数n,如果n是奇数,将其减去3;如果n是偶数,将其变为n/2。如果可以进行若干次操作后使得n等于0,返回需要操作的次数,如果无法将n变为变为0,返回-1。 二.算法一(数学) 我们可以从0开始反过来推导,首先要使n的最后值是0那么必然是n−3=0n-3 展开全文
头像 SandMonth
发表于 2021-10-13 01:49:16
NC638 简单的变换 给你一个正整数n,重复进行以下操作: 1.如果n是奇数,令n=n−3 2.如果n是偶数,令n=n/2 重复上述直至n=0停止,请输出进行操作的次数,如果n永远无法变成零,输出-1 案例 输入:9 返回值:3 说明: 1.9->6(9-3=6) 2.6->3( 展开全文
头像 xqxls
发表于 2021-09-14 12:59:21
题意整理 给定正整数n,如果n是奇数,将其减去3;如果n是偶数,将其变为n/2。 如果n等于0,返回之前变换次数,如果无法变为0,返回-1。 方法一(模拟) 1.解题思路 用一个死循环,模拟n的值变换的过程。 如果n是奇数,将其减去3;如果n是偶数,将其变为n/2。 如果n小于0,说明不可能再 展开全文
头像 蘑菇睡不着
发表于 2021-09-05 20:26:59
描述 给你一个正整数n,重复进行以下操作:1.如果n是奇数,令n=n-3n=n−32.如果n是偶数,令n=n/2n=n/2重复上述直至n=0停止,请输出进行操作的次数,如果n永远无法变成零,输出-1 示例1 输入: 2 返回值: -1 说明: 1:2->1(2/2=1) 2:1-> 展开全文