C语言求助 题目 求第1500个只有2,3,5因子的数 数是从小到大排列 第一个数是1,1=2^0
C语言求助题目求第1500个只有2,3,5因子的数数是从小到大排列第一个数是1,1=2^0*3^0*5^0。希望给的是原创好的加分谢谢...
C语言求助 题目 求第1500个只有2,3,5因子的数 数是从小到大排列 第一个数是1,1=2^0*3^0*5^0。希望给的是原创 好的加分 谢谢
展开
5个回答
展开全部
#include <iostream>
using namespace std;
int POW(int x)
{
while(x!=1)
{
if (x%2==0)
{
x/=2;
}
else if (x%3==0)
{
x/=3;
}
else if (x%5==0)
{
x/=5;
}
else
{
return 0;
}
}
return 1;
}
void main()
{
for (int i=1,j=1;j<=1500;i++)
{
if (POW(i))
{
j++;
cout<<i<<" ";
}
}
}
已调试好了。 最后一个数就是第1500个符合题意的。
更多追问追答
追问
能不能麻烦你稍微改下 我目前只学的C预言 没有接触C++
追答
#include <stdio.h>
int POW(int x)
{
while(x!=1)
{
if (x%2==0)
{
x/=2;
}
else if (x%3==0)
{
x/=3;
}
else if (x%5==0)
{
x/=5;
}
else
{
return 0;
}
}
return 1;
}
void main()
{
for (int i=1,j=1;j<=1500;i++)
{
if (POW(i))
{
j++;
printf("%d ",i);
}
}
}
//这样可以了吧?
展开全部
void main()
{
int i,j,k,n=0,s=0;
for(k=0;;k++){
for(j=0;;j++){
for(i=0;;i++){
s=2^i*3^j*5^k;
n++;
printf("第%d个数=%d\n",n,s);
if(n>1500)
break;
}
if(n>1500)
break;
}
if(n>1500)
break;
}
printf("第1500个数=%d\n",s);
// return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先提醒一点,你这个都是乘法的话第1500个已经超过了int32
这个问题很复杂,因为2^3*3^0*5^0=8,但2^0*3^1*5^1=15,所以不能光从数量上去判断他们的大小,所以这是一个非常确定的问题,解决这个问题不能通过常规手段来实现,只能通过大数据的枚举然后排序来实现
static void Main(string[] args)
{
Program p = new Program();
int[] arr;
int[] rst=new int[10000];
int n = 0;
arr = p.getarr(5, 5, 5
);
Array.Sort(arr);
for (int i = 0; i < arr.Length-1; i++)
{
for ( int j = 1; j < arr.Length - i-1; j++)
{
if (arr[i + j] == arr[i])
{
arr[i + j] = 0;
}
}
}
for (int k = 0; k < arr.Length; k++)
{
if (arr[k] != 0)
{
rst[n] = arr[k];
n++;
}
}
Console.WriteLine(rst[100]);
Console.Read();
}
public int[] getarr(int i,int j ,int k)
{
int n = 0;
int s=i*j*k;
int[] arr=new int[s];
for(int a=0;a<i;a++)
for(int b=0;b<i;b++)
for (int c = 0; c < i; c++)
{
arr[n] = Convert.ToInt32(Math.Pow(2, a) * Math.Pow(3, b) * Math.Pow(5, c));
n++;
}
return arr;
}
这是我的代码,因为你的1500实在太大,我选择输出第100个,结果是13500
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请给出前四个例子,以方便理解题意。
追问
1=2^0*3^0*5^0 2=2^1*3^0*5^0
3=2^0*3^1*5^0
4=2^2*3^0*5^0
应该是这个意思
求解答阿大神
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//来bug了,要工作了,没帮你调试过,思路应该看得懂吧,自己调试一下
void test1()
{
int n = 0;
unsigned int value,temp_val;
int flag = 0;
value = 1;
while(1)
{
temp_val = value;
while(1)
{
if(0 != value%2 && 0 != value%3 && 0 != value%5)
{
flag = 0;
break;
}
if(0 == value%2)
{
value = value/2;
if(1 == value)
{
flag = 1;
break;
}
}
if(0 == value%3)
{
value = value/3;
if(1 == value)
{
flag = 1;
break;
}
}
if(0 == value%5)
{
value = value/5;
if(1 == value)
{
flag = 1;
break;
}
}
}
value++;
if(1 == flag)
{
n++;
printf("%d \n",temp_val);
if(1500 == n)
{
break;
}
}
}
}
void test1()
{
int n = 0;
unsigned int value,temp_val;
int flag = 0;
value = 1;
while(1)
{
temp_val = value;
while(1)
{
if(0 != value%2 && 0 != value%3 && 0 != value%5)
{
flag = 0;
break;
}
if(0 == value%2)
{
value = value/2;
if(1 == value)
{
flag = 1;
break;
}
}
if(0 == value%3)
{
value = value/3;
if(1 == value)
{
flag = 1;
break;
}
}
if(0 == value%5)
{
value = value/5;
if(1 == value)
{
flag = 1;
break;
}
}
}
value++;
if(1 == flag)
{
n++;
printf("%d \n",temp_val);
if(1500 == n)
{
break;
}
}
}
}
更多追问追答
追问
大概明白思路了 先谢谢拉
unsign int value,temp_val
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询