初级光能
#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