这里分享的是一些我做过的4星、五星,以及我总是提交超过3次的题目。
题目描述:
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
输入:
输入有多组数据。
每组一行,输入n。
输出:
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
样例输入:
100
样例输出:
11 31 41 61 71
我的记录(你可能看不懂):
1. 各种错误。判定到底是不是素数,返回的代表什么意思搞不清楚
2. 初始化一定要用for循环一遍
3. 赋初值到底在哪里赋,每一次循环开头
4. 输出的格式,输出为-1之后换行,总的最后又换行冲突
#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
using namespace std;
#define MAX 10000
int a[10002];
bool judge(int x){ //是素数吗?
if(x<=1)
return false;
int bound=(int)sqrt((double)x)+1;//多加一,防止强转带来误差
for(int i=2;i<bound;i++)
if(x%i==0)
return false;
return true;
}
void init(){
for(int i=0;i<MAX;i++){
a[i]=0;
}
a[0]=1;
a[1]=1;
for(int i=2;i<=MAX;i++){
if(a[i]==1)
continue;
else{
if(!judge(i)){ //不是素数
a[i]=1;
for(int j=i*i;j<=MAX;j+=i){ //所有i的倍数标记为1
a[j]=1;
}
}
//不是素数则保持初始值,为0
}
}
}
int main(){
int n;
init();
bool isflag=false;
while(cin>>n){
isflag=false;
for(int i=2;i<n;i++){
if(a[i]==0&&(i%10==1)){
if(isflag==false){
cout<<i;
isflag=true;
}
else
cout<<” “<<i;
}
}
if(isflag==false)
cout<<“-1”;
cout<<endl;
}
return 0;
}
/**************************************************************
Problem: 1163
User: WZDCJ0206
Language: C++
Result: Accepted
Time:10 ms
Memory:1568 kb
****************************************************************/