#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;
}
首先你要把输出的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了
额,我的程序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";
}
那个wang函数可以直接循环到sqrt(x),有效率。
输出是"none",不是"nome"
望财纳蟹蟹
赵逸凡在2018-10-04 20:34:11追加了内容
仔细看看题目到n,不是<n
