1 条题解
-
0
C++ :
#include <bits/stdc++.h> using namespace std; //首先实现一个求最小值的函数,在后面会用得到 int GetMin(int a,int b,int c) { if(a <= b && a <= c) return a; else if(b <= c && b <= a) return b; else return c; } int GetUglyNumber_Solution(int index ) { int arr[index]; if(index < 7)//小于7的丑数直接返回自身就可以 return index; else//这是大于7时的方案 { arr[0] = 1;//首先把数组第一个元素初始化为1,作为万物之伊始 int temp2 = 0,temp3 = 0,temp5 = 0,j = 0,p2,p3,p5; /*temp2、temp3、temp5代表了三个乘积的指针,p2、p3和p5则记录了 当前其对应的指针指向的值与自身倍数的乘积。j用来判断是否到达了要 求丑数的范围。*/ while(j < index) { if(arr[temp2]*2 > arr[j]) p2 = arr[temp2]*2; /*如果当前的乘积大于最右端丑数,指针无需移动,只需记录下 这个乘积*/ else p2 = arr[++temp2]*2; //这个与上一语句的差别仅在于是否移动指针 //下面均同理 if(arr[temp3]*3 > arr[j]) p3 = arr[temp3]*3; else p3 = arr[++temp3]*3; if(arr[temp5]*5 > arr[j]) p5 = arr[temp5] * 5; else p5 = arr[++temp5] * 5; arr[++j] = GetMin(p2,p3,p5); /*最后比较一下三个乘积的最小值,别忘了要++j把他加在当前数组 末尾的下一位*/ } } return arr[index-1]; } int main() { int k = 0; scanf("%d", &k); printf("%d", GetUglyNumber_Solution(k)); }
- 1
信息
- ID
- 3155
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者