问题标题: 酷町堂:2893哪错了

0
0
已解决
王学庚
王学庚
初级光能
初级光能
#include<iostream>
#include<algorithm>
#include<ctime>
#include<cstdlib>
#include<cmath>
using namespace std;
int wang(int x){
    for(int i=2;i<x;i++){
        if(x%i==0)
        return 0;
    }
    return 1;
}
int main()
{
    int n,x,a,b,m=0;
    cin>>n>>x;
    for(int i=2;i<n;i++){
        for(int j=2;j<n;j++){
            if(wang(i)==1&&wang(j)==1&&j-i==x){
                b=j;
                a=i;
                m=1;
            }
        }
    }
    if(m==1)
    cout<<a<<' '<<b;
    else
    cout<<"nome";
    return 0;
}

 


0
已采纳
杨陈卓
杨陈卓
新手天翼
新手天翼

首先你要把输出的nome改成none

接下来有两种改法:

第一种:

在主程序中双层循环中的if中末尾加一个跳出语句

然后在内循环外加一个判断:

改完之后:

for(int i=2;i<n;i++)
    {
        for(int j=2;j<n;j++)
        {
            if(wang(i)==1&&wang(j)==1&&j-i==x)
            {
                b=j;
                a=i;
                m=1;
                跳出 
            }
        }
        如果m是1 
            跳出
    }

因为题目中要求是最小的一组,举个例子:按你原来的代码输入100和10输出是79和89

而正确的是3和13

第二种:

不需要a和b,直接在if中输出,然后结束所有程序

末尾就不需要判断f是不是1了。

直接输出none

我已经AC了

1
张元宝
张元宝
修练者
修练者

额,我的程序AC了^_^

在外面定义一个函数,专门判断从1到n的素数有哪些,再用一个数组 a[10000] , 存储1到n的素数。

bool s=true;
    外循环 (i){
        内循环( j 的终止值是 i 的平方根,即sqrt(i) ){  
            if(i%j==0) {
                s=false;
                break;
            }
        }
        if(s) {
            a[k]=i;
            k++;
        }
        每次将s赋值为true; 
    }

主函数{

    .  .  .  .  .  .

    for(int i=0; i<k; i++) {
        for(int j=i+1; j<k; j++) {

                如果 a[j] - a[i]为x{
                    输出 a[i] , a[j];
                    return 0;

                }
            }
        }

       能运行到这里,说明找不到,则输出"none"。

}

望采纳!

张元宝在2018-10-05 20:17:53追加了内容
整体思路:先找出 n 以内的质数,并用 a 数组存储它们,之后用一个双重循环找出最小的两个质数,输出,结束程序。如果没有找到,在最后输出“none”.在以下程序中,n,m,k,a[10000]等皆为全局变量
子函数(int x) {
    bool s=true;
    for(int i=2; i<=x; i++) {
        for(int j=2; j<=sqrt(i); j++) {
            如果j能被i整除 {
                s 赋值false;
                break;
            }
        }
        如果s值为真{
            a[k]=i;
            k++;//k用于记录有多少个质数
        }
        为了下一次运算,s重新赋值为true。
    }
}

主函数{

      输入n,m;

    调用子函数(n) 
    for(int i=0;i<k;i++){
        for(int j=i+1;j<k;j++){
            if(a[j]-a[i]==m){
                cout<<a[i]<<" "<<a[j];
                return 0;
            }
        }
    }

      cout<<"none";

 

}

0
赵逸凡
赵逸凡
初级启示者
初级启示者

那个wang函数可以直接循环到sqrt(x),有效率。

输出是"none",不是"nome"

望财纳蟹蟹

赵逸凡在2018-10-04 20:34:11追加了内容

仔细看看题目到n,不是<n

0
我要回答