整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]

给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,

例如1101是重复数,1231是不重复数。


分析:

从这个正整数+1开始,往后取整数转换为字符串,进行判断,如果相邻2个都不相等,那就是我们要找的数了。


实现代码如下:

//给定任意一个正整数,求比这个数大且最小的“不重复数”“不重复数”的含义是相邻两位不相同,
//例如1101是重复数,1231是不重复数。
int GetMinNum(int nNum)
{
	char Temp[20];
	int nLen;
	for (int i = nNum+1; ;i++)
	{
		itoa(i, Temp, 10);
		nLen = strlen(Temp);
		for (int j=0; j<nLen-1; j++)
		{
			//有重复,跳出循环。
			if (Temp[j]==Temp[j+1])
			{
				break;
			}
		}

		//没有重复,返回i。
		if (j==nLen-1)
		{
			return i;
		}
	}

	return 0;
}

测试代码:

int main()
{
	int nTemp;
	int nRet;
	while(1)
	{
		scanf("%d", &nTemp);
		
		if (nTemp==9999)
		{
			break;
		}
		else
		{
			nRet = GetMinNum(nTemp);

			cout << nRet << endl;
		}
	}
	return 0;
}

测试结果就不贴了,有兴趣的朋友可以试试。

此题性能优化算法见:

整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]


转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12178719




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 如果您想要从一个整数数组中找出小于给定整数m的最大数,可以使用以下步骤: 1. 对数组进行排序,使得数组中的数按升序排列。 2. 从前往后遍历数组,找到第一个小于m的数即为所。 例如,对于给定数组[5, 10, 15, 20]和数字13,可以按以下步骤操作: 1. 对数组进行排序,得到[5, 10, 15, 20]。 2. 从前往后遍历数组,发现5小于13,因此返回5。 如果您想使用代码实现这个功能,可以使用以下Python代码: ``` def find_max(arr, m): arr.sort() # 对数组进行排序 for num in arr: # 遍历数组 if num < m: # 如果数字小于m,则返回该数字 return num return -1 # 如果没有找到小于m的数字,则返回-1 ``` 希望这些信息对您有帮助。 ### 回答2: 假设给定整数数组为arr,长度为n。我们可以通过以下步骤找到小于m的最大数: 1. 初始化变量max_num为0,用于保存小于m的最大数。 2. 遍历数组arr中的每个元素num: - 如果num小于m且大于max_num,则更新max_num为num。 3. 返回max_num作为结果。 以下是一个具体的示例代码实现: ```python def find_max_num(arr, m): max_num = 0 for num in arr: if num < m and num > max_num: max_num = num return max_num # 测试样例 arr = [10, 20, 30, 40, 50] m = 35 result = find_max_num(arr, m) print(result) # 输出为30 ``` 在该示例中,给定整数数组为[10, 20, 30, 40, 50],m为35。我们通过遍历数组中的元素,找到小于35的最大数为30。因此,程序输出结果为30。 这个算法的时间复杂度为O(n),其中n是数组的长度。 ### 回答3: 首先,我们可以对给定整数数组进行排序,将数组中的数字按照从小到大的顺序排列。 然后,我们从数组的最后一个数字开始,将其与m进行比较。如果该数字小于m,则说明找到了小于m的最大数,直接返回该数字。 如果该数字大于等于m,则继续向前遍历数组,直到找到一个小于m的数字或者遍历到数组的第一个数字为止。 如果遍历到数组的第一个数字仍然大于等于m,则说明数组中所有的数字都大于等于m,此时无法找到小于m的最大数,返回-1或者其他特定的标识。 综上所述,我们可以编写如下的代码来实现该功能: ``` def findMaxNum(nums, m): nums.sort() # 对数组进行排序 for i in range(len(nums)-1, -1, -1): if nums[i] < m: # 找到小于m的最大数 return nums[i] return -1 # 数组中所有数字都大于等于m nums = [1, 3, 5, 7, 9] m = 6 result = findMaxNum(nums, m) print(result) # 输出:5 ``` 在这个例子中,给定整数数组为[1, 3, 5, 7, 9],m为6。经过排序后,数组变为[1, 3, 5, 7, 9]。遍历数组后发现,最后一个小于6的数字是5,因此返回5作为结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值