华为机试—输出第n个丑数

#include <stdio.h>

//判断一个数是否为丑数
bool IsChou(__int64 num)
{
	while(num!=0)
	{
		if(num == 1)
			return 1;
		else if(num % 2 == 0)
			num /= 2;
		else if(num % 3 == 0)
			num /= 3;
		else if(num % 5 == 0)
			num /=5;
		else
			return 0;
	}
}

int findUglyNumber(int n)
{
	__int64 a[501];
	int count=0;

	for(__int64 num=1;count<501;num++)
	{
		if(IsChou(num))
			a[count++]=num;
	}

	if(n<1||n>500)
		printf("-1\n");
	else
		printf("%d\n",a[n-1]);

	return 0;
}

int main()
{
	int n;
	while(~scanf("%d",&n)){
		findUglyNumber(n);
	}
	return 0;
}

时间: 2024-10-11 15:22:52

华为机试—输出第n个丑数的相关文章

华为机试—输出包含名字的个数和字符串

题目: 输入一个n,再输入n个字符串,再输入一个名字串,输出包含名字串的个数和字符串. 输入: 10 sfsfjacksdf jajajack jack jjjjjjjjckd jjjjjjjjjjjack jackkkkk jajackkkkkkk hello wordjack jajaccccjack jack 输出: 8 sfsfjacksdf jajajack jack jjjjjjjjjjjack jackkkkk jajackkkkkkk wordjack jajaccccjack

华为机试—输出大写字母

题目:输出大写字母 输入一个字符串,输出其中的大写字母 输入 2, sdARSFGfg 输出 ARSFG #include <iostream> #include <string> using namespace std; void filter(string str) { int i,len; len=str.length(); for(i=0;i<len;i++) { if(str[i]>=65 && str[i]<=90) printf(&q

华为机试—输出含“23”的数

输入一行数字:123 423 5645 875 186523 在输入第二行:23 将第一行中含有第二行中"23"的数输出并排序 结果即:123 423 186523 /* 先排序,顺序遍历每个数字,看是否含有23 */ #include<stdio.h> #include<stdlib.h> int cmp(const void *a,const void *b) { return *(int*)a-*(int*)b; } int main(int argc,

华为机试—输出一个数字各个位数和

两种解法: 1.逐位相加 #include <iostream> #include <string> using namespace std; int main() { int s; cin>>s; int sum=0; while (s!=0) { sum=sum+s%10; s=s/10; } cout<<sum; return 0; } 2.转换成字符串相加 #include <iostream> #include <string&g

华为机试—亮着电灯的盏数(优化过的双重for)

题目:亮着电灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生数一致.不能写笨拙的双重循环(优化过

华为机试—亮着电灯的盏数(求完全平方数的个数)

题目:亮着电灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生数一致.不能写笨拙的双重循环(优化过

华为机试—亮着电灯的盏数(1—N完全平方数的个数)

题目:亮着电灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生数一致.不能写笨拙的双重循环(优化过

[华为机试]输入数字的汉语拼音,每个拼音的首字母大写。输出该数字的阿拉伯数字。

//输入数字的汉语拼音,每个拼音的首字母大写.输出该数字的阿拉伯数字. //JiuBaiJiuShiJiu -> 999 #include<stdio.h> #include<string.h> int result = 0; void add(int n,char wei[]) { if(strcmp(wei,"Wan") == 0) result = result + n * 10000; else if(strcmp(wei,"Qian&q

华为 2015 机试 输出:数字后面的连续出现的(2个或多个)相同字符(数字或者字符),删去一个,非数字后面的不要删除,例如,对应输出为:33aabb55pin。

1 package 华为机试; 2 //C++ 输入:由数字和字母组成的字符串,例如:333aaabb55ppin 3 //输出:数字后面的连续出现的(2个或多个)相同字符(数字或者字符),删去一个,非数字后面的不要删除,例如,对应输出为:33aabb55pin. 4 5 //这句话的核心就是在字符串删除一些字符,感觉处理很复杂,删除哪些字符呢?我们观察发现, 本字符串中删除了一个3,一个a,一个p,满足的规则是啥呢? 333中删除最后一个3,3aa删除了一个a,5pp中删除一个p, 6 //规