| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2869 人关注过本帖
标题:唉,杭电ACM一道很坑爹的题目,素因子什么的,大侠快进来看卡,帮助帮助,我 ...
只看楼主 加入收藏
skyn
Rank: 2
来 自:西南交通大学
等 级:论坛游民
帖 子:24
专家分:32
注 册:2011-10-17
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:31 
唉,杭电ACM一道很坑爹的题目,素因子什么的,大侠快进来看卡,帮助帮助,我要纠结得吐血身亡了!!(已加我的思路注释,先谢谢了!!在线等。。在线等)
程序代码:
#include <stdio.h>
#include<math.h>
void main()
{
    int i[5000],j,b,d,a,c[5000],n,m,k,im,e,em,p; ////这里很混乱。。。
    k=0;
    scanf("%d",&n);
    for(m=0;m<n;m++)////输入n个数
    {
   
   
    scanf("%d",&i[m]);
    im=i[m];
        for(;im>=2;im--) ///先找到这个数里的素数
    {
           
   for(j=2;j<=sqrt(im);j++)
     {
      b=im%j;
     if(b==0)
     {
      break;
      }
     }
     if((b!=0)&&(i[m]%im==0)&&(i[m]!=im)) ///再判断这个素数是不是他的因子
      {
         
          c[m]=im; ////记录素因子
           
           // printf("%d",c[m]); ///用来测试用的
             
            break;
         
    
      }
   
   
    }
    }

   
    d=c[0];
    for(j=0;j<=m;j++) ////判断哪一个素因子最大
    {
        if(d<=c[j])
        {
        d=c[j];
        e=j;
        }
    }
    printf("\n%d",i[e]); ///输出。。。跟例子一样的,就是WA。。
    return 0;
   
}
题目在这找到了一个有翻译的。

题目号是杭电2710

Description

To improve the organization of his farm, Farmer John labels each of his N (1 <= N <= 5,000) cows with a distinct serial number in the range 1..20,000. Unfortunately, he is unaware that the cows interpret some serial numbers as better than others. In particular, a cow whose serial number has the highest prime factor enjoys the highest social standing among all the other cows.

(Recall that a prime number is just a number that has no divisors except for 1 and itself. The number 7 is prime while the number 6, being divisible by 2 and 3, is not).

Given a set of N (1 <= N <= 5,000) serial numbers in the range 1..20,000, determine the one that has the largest prime factor.

/*
约翰的农场开始渐入正轨了,因为他给每头牛贴上了范围在1..20,000的清晰的序列号标签。不幸地,他不知道牛认为有一些序列号比较好。一只牛的序列号如果有比其它牛都高的素因子,那它就有最高的社会地位。

(回忆一下,素数指它只有1和本身两个约数。数字7是素数而6不是,因为6还有约数2和3)。

给你N(1 <= N <= 5,000)个序列号,每个序列号的范围在 1..20,000,确定谁有最大的素因子。
*/

Input

* Line 1: A single integer, N

* Lines 2..N+1: The serial numbers to be tested, one per line

/*
* 第 1 行:一个单独的整数 N。
* 第 2-N+1 行:N个序列号,每行1个。
*/

Output

* Line 1: The integer with the largest prime factor. If there are more than one, output the one that appears earliest in the input file.

/*
一行:具有最大素因子的序列号。如果有多个这样的序列号,则输出输入数据中较早输入的数。
*/

Sample Input


4
36
38
40
42

Sample Output


38

Hint

OUTPUT DETAILS:
19 is a prime factor of 38. No other input number has a larger prime factor.

/*
输出解释:
19是38的最大的素因子。其它没有哪个数有比它更大的素因子了。
*/



[ 本帖最后由 skyn 于 2012-8-20 20:52 编辑 ]
搜索更多相关主题的帖子: 在线 
2012-08-20 20:31
skyn
Rank: 2
来 自:西南交通大学
等 级:论坛游民
帖 子:24
专家分:32
注 册:2011-10-17
收藏
得分:0 
大神。大侠!!快来救救我、、、我纠结这道题 都快要吐血身亡了!!

﹎'ひS.т.й.R.S.に`"
2012-08-20 20:40
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:3 
输入5000 你这for(j=0;j<=m;j++) 就越界了
还有 他应该是要求多次输入的吧
2012-08-20 21:14
skyn
Rank: 2
来 自:西南交通大学
等 级:论坛游民
帖 子:24
专家分:32
注 册:2011-10-17
收藏
得分:0 
回复 3楼 草狼
越界?没有超出范围呀,


关于多次输入。。换成个while(scanf("%d",&n))!=EOF)试试

﹎'ひS.т.й.R.S.に`"
2012-08-20 21:27
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:3 
题目不错,为什么没人来解答呢?
2012-08-23 00:05
justNPC
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:311
注 册:2012-8-11
收藏
得分:3 
程序代码:
int main()
{
    int prime(int p[],int k);
    int number[5000],p[3000],max=0,temp1=0,temp2=0,i,j,m,k=0,end;
    scanf("%d",&m);
    end=prime(p,k);
    for(i=0;i<m;i++)
    {
        scanf("%d",&number[i]);
        for(j=end;j>=0;j--)
            if(number[i]%p[j]==0)
                {
                    temp1=p[j];
                    break;
                }
        if(temp2<temp1) 
        {
            temp2=temp1;
            max=number[i];
        }
    }
    printf("\n%d\n",max);
    return 0;
}
int prime(int p[],int k)
{
    int i,j,flag;
    for(i=2;i<20000;i++)
    {
        flag=1;
        for(j=2;j<=sqrt(i);j++)
            if(i%j==0)
            {
                flag=0;
                break;
            }
        if(flag==1)    p[k++]=i;
    } 
    return k-1;
}

lz连编译都没通过么,稍微改了一下,好想也没输出正确答案
我编了一个不是按lz的思路写的
我用一个子函数把1到20000的素数全部存进一个数组p,然后每输入一个数就从数组p中找到这个数的最大因子,通过素因子的比较,把含有最大素因子的数放到max中
自己测试了几组数据 好像没有错误。
2012-08-23 17:18
菜鸟0
Rank: 2
等 级:论坛游民
帖 子:37
专家分:91
注 册:2012-6-20
收藏
得分:3 
这个问题有点歧义不?是不是找到最大的素数就可以了。如果不是的话,
可不可以这样解决,既然是素数因子。那它首先应该是素数,我们把5000以内的素数都找出来,按从小到大的顺序排列以此乘以2,直到出现刚好不大于5000的数为止那个数就是有最大素数因子的数。比如说1-38内的素数有1,2,3,5,7,11,13,17,19,23,29,31,37。以此乘以2后为2,4,6,10,14,22,26,34,38,46。。38是刚好不大于38的数,那么38就是1-38中有最大素数因子的数了。
如果可以的话,我就写代码了啊。。。。
2012-08-24 21:58
菜鸟0
Rank: 2
等 级:论坛游民
帖 子:37
专家分:91
注 册:2012-6-20
收藏
得分:0 
回复 7楼 菜鸟0
刚才忘了说了,要是可以的话,直接找出1-2500中最大的素数,再乘以2就可以了。不用那么麻烦了。。。。还用1-38中的那个举例,就是直接找出1-19中最大的素数,再乘以2,就是38了。。。
2012-08-24 22:03
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 4楼 skyn
输入5000的时候 for(m=0;m<n;m++)这个循环结束m的值是多少?没越界么?
2012-08-24 23:37
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:3 
本不想参与,不过呵呵有点失望。刺激你们一下吧。

刚试了一下,10行代码(核心只有4行)0毫秒AC。

重剑无锋,大巧不工
2012-08-24 23:37
快速回复:唉,杭电ACM一道很坑爹的题目,素因子什么的,大侠快进来看卡,帮助帮 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018100 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved