这里分享的是一些我做过的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 ****************************************************************/