Problem 33

问题描述:

The fraction 49/98 is a curious fraction, as an inexperienced mathematician in attempting to simplify it may incorrectly believe that 49/98 = 4/8, which is correct, is obtained by cancelling the 9s.

We shall consider fractions like, 30/50 = 3/5, to be trivial examples.

There are exactly four non-trivial examples of this type of fraction, less than one in value, and containing two digits in the numerator and denominator.

If the product of these four fractions is given in its lowest common terms, find the value of the denominator.

 

解决问题:

 

 

public static int find(){
		int result =0;
		int[][] numbers = new int[4][2];
		
		int fenzi = 11;
		int index = 0;
		for(fenzi=11; fenzi<100&&index<4; fenzi++){
			if(fenzi%10==0){
				continue;
			}else{
				for(int fenmu = fenzi+1; fenmu<100&&index!=4; fenmu++){
					int[] element = new int[4];
					element[0] = fenzi/10;
					element[1] = fenzi%10;
					element[2] = fenmu/10;
					element[3] = fenmu%10;
					//System.out.println(fenzi+":"+fenmu);
					if(element[0]==element[2]){
						if(fenzi*element[3]==fenmu*element[1]){
							numbers[index][0] = element[1];
							numbers[index][1] = element[3];
							index++;
							break;
						}
					}
					if(element[0]==element[3]){
						if(fenzi*element[2]==fenmu*element[1]){
							numbers[index][0] = element[1];
							numbers[index][1] = element[2];
							index++;
							break;
						}
					}
					if(element[1]==element[2]){
						if(fenzi*element[3]==fenmu*element[0]){
							numbers[index][0] = element[0];
							numbers[index][1] = element[3];
							index++;
							break;
						}
					}
					if(element[1]==element[3]){
						if(fenzi*element[2]==fenmu*element[0]){
							numbers[index][0] = element[0];
							numbers[index][1] = element[2];
							index++;
							break;
						}
					}
				}
			}
		}
		
		fenzi = 1;
		int fenmu = 1;
		for(int i=0; i<numbers.length; i++){
			fenzi *= numbers[i][0];
			fenmu *= numbers[i][1];
		}
		
		if(fenmu%fenzi==0){
			result = fenmu/fenzi;
		}else{
			
		}
		
		return result;
	}

 

### LeetCode Problem 33 的 C++ 实现 LeetCode 第 33 题通常被称为 **Search in Rotated Sorted Array**,其目标是在一个旋转后的有序数组中查找某个特定的目标值。如果存在该目标值,则返回它的索引;否则返回 `-1`。 以下是基于二分查找法的 C++ 解决方案: ```cpp class Solution { public: int search(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { return mid; // 找到目标值 } // 判断哪一侧是有序的 if (nums[left] <= nums[mid]) { // 左侧有序 if (target >= nums[left] && target < nums[mid]) { right = mid - 1; // 缩小范围至左侧 } else { left = mid + 1; // 转向右侧 } } else { // 右侧有序 if (target > nums[mid] && target <= nums[right]) { left = mid + 1; // 缩小范围至右侧 } else { right = mid - 1; // 转向左侧 } } } return -1; // 如果未找到目标值 } }; ``` 上述代码实现了针对旋转排序数组的有效搜索算法[^4]。通过判断当前中间位置两侧哪个部分保持有序,可以进一步缩小搜索空间,从而达到高效的目的。 #### 关键点解析 - 使用 `while (left <= right)` 循环条件来确保不会错过任何可能解。 - 当前区间 `[left, right]` 中间位置定义为 `mid`,并比较 `nums[mid]` 和目标值的关系。 - 若左半边有序 (`nums[left] <= nums[mid]`) 并且目标位于此范围内,则继续在左边查找;反之则转向右边。 - 同理处理右半边的情况。 最终时间复杂度为 \(O(\log n)\),其中 \(n\) 是输入数组长度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值