| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 450 人关注过本帖
标题:一行判断合数的代码,请高手指点问题所在!Thanks:)
只看楼主 加入收藏
Evander
Rank: 1
等 级:新手上路
帖 子:4
专家分:3
注 册:2011-5-6
结帖率:0
收藏
已结贴  问题点数:10 回复次数:2 
一行判断合数的代码,请高手指点问题所在!Thanks:)
程序代码:
/*输入自然数n,求前n个合数(非素数),
其因子仅有2,3,或5。
*/
#include<iostream>
#include<stdio.h>
#include<time.h>
using namespace std;
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int n,count=0;
    bool ok=false,ok2=false;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            if(i%j==0)count++;//判断是否为合数setp1
                //cout<<i<<" "<<j<<" "<<count<<endl;
        }
        if(count>2)//判断是否为合数setp2
        {
            ok2=true;
            if((n%2==0)||(n%3==0)||(n%5==0))//素因子包含2、3或5
                ok=true;
            for(int n=1;n<=i;n++)
            {
                if((n!=i)&&(n!=1))
                {
                    if((n!=2)&&(n!=3)&&(n!=5))
                   {
                    if(i%n==0)ok=false;
                   }
                }
                
            }
        }
        if(ok&&ok2)
        {
            cout<<i<<" ";
            cout<<count<<endl;
        }
        count=0;
    }
    printf("Time used=%.21f",(double)clock()/CLOCKS_PER_SEC);
    return 0;
}

输入:10
结果:
4 3
5 2  不知道为啥ok和ok2都true之后还输出了5,其因数只有2...下同。。
6 4
7 2
9 3
10 4
Time used=0.000000000000000000000


鄙人琢磨了几个小时。。。实在脑壳都炸了,请高手指点迷津!
2012-01-15 23:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
我该说你变态呢,还是自虐?

为什么要把
int count=0;
bool ok=false,ok2=false;
这三个单程使用到的变量定义在for之外?
2012-01-16 08:56
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:5 
以下是引用Evander在2012-1-15 23:10:19的发言:

/*输入自然数n,求前n个合数(非素数),
其因子仅有2,3,或5。
*/
#include
#include
#include
using namespace std;
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int n,count=0;
    bool ok=false,ok2=false;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            if(i%j==0)count++;//判断是否为合数setp1
                //cout<
首先去掉不必要的功能,然后单步调试,学会用watch窗口

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-01-19 19:01
快速回复:一行判断合数的代码,请高手指点问题所在!Thanks:)
数据加载中...
 
   



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

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