九度OJ 题目1163:素数
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2782 解决:761
http://ac.jobdu.com/problem.php?pid=1163
题目描述:
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
输入:
输入有多组数据。
每组一行,输入n。
输出:
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
样例输入:
100
样例输出:
11 31 41 61 71
#include <memory.h> #include <iostream> using namespace std; int prime[320]; bool isPrime[10005]; int primeNumber( int n ){ memset( isPrime, 0, sizeof(isPrime) ); int d = 100; int i, j; for( i=2; i<6; i++ ){ //2,3,5 if( i%4 == 0 ) continue; for( j=i*i; j<n; j+=i ) isPrime[j] = 1; //true表示非素数 } for( i=7; i<=d; i+=2 ){ if( i % 3 == 0 ) continue; if( i % 5 == 0 ) continue; for( j=i*i; j<n; j+=i ) isPrime[j] = 1; //1表示非素数 } for( i=2, j=0; i<n; i++ ) if( !isPrime[i] && i%10 == 1 ) prime[j++] = i; return j; } int main(){ int i, j, k, l, m, n; l = primeNumber( 10000 ); // cout << endl << "l = " << l << endl; // cout << prime[l-1] << endl; while( cin >> n ){ i = 0; bool flag = 0; while(prime[i]<n && i<l){ if( flag ) cout << " " << prime[i++]; else{ cout << prime[i++]; flag = 1; } } if(!flag) cout << "-1"; cout << endl; } return 0; }
九度OJ 题目1164:旋转矩阵
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1331 解决:497
http://ac.jobdu.com/problem.php?pid=1164
题目描述:
任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。
输入:
输入有多组数据。
每组数据第一行输入n(1<=n<=9),从第二行开始输入两个n阶矩阵。
输出:
判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
如果旋转角度的结果有多个,则输出最小的那个。
样例输入:
3
1 2 3
4 5 6
7 8 9
7 4 1
8 5 2
9 6 3
样例输出:
90
// 1 2 3 7 4 1 9 8 7 3 6 9 // 4 5 6 8 5 2 6 5 4 2 5 8 // 7 8 9 9 6 3 3 2 1 1 4 7 #include <stdio.h> int a[10][10], b[10][10]; int main() { int i, j, k, m, n; freopen("1164.txt","r",stdin);// while( scanf("%d",&n) == 1 ){ for( i=0; i<n; i++ ) for( j=0; j<n; j++ ) scanf("%d",&a[i][j]); for( i=0; i<n; i++ ) for( j=0; j<n; j++ ) scanf("%d",&b[i][j]); bool flag = 0; if( b[0][0] == a[0][0] ) { for( i=0; i<n; i++ ){ for( j=0; j<n; j++ ) if(a[i][j]!=b[i][j]) { flag = 1; break;} if(flag) break; } if(flag) puts("-1"); else puts("0"); } else if( b[0][n-1] == a[0][0] ) { for( i=0; i<n; i++ ){ for( j=0; j<n; j++ ) if(a[i][j]!=b[j][n-1-i]) { flag = 1; break;} if(flag) break; } if(flag) puts("-1"); else puts("90"); } else if( b[n-1][n-1] == a[0][0] ) { for( i=0; i<n; i++ ){ for( j=0; j<n; j++ ) if(a[i][j]!=b[n-1-i][n-1-j]) { flag = 1; break;} if(flag) break; } if(flag) puts("-1"); else puts("180"); } else if( b[n-1][0] == a[0][0] ) { for( i=0; i<n; i++ ){ for( j=0; j<n; j++ ) if(a[i][j]!=b[n-1-j][i]) { flag = 1; break;} if(flag) break; } if(flag) puts("-1"); else puts("270"); } else puts("-1"); } return 0; }
九度OJ 题目1165:字符串匹配
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1331 解决:430
http://ac.jobdu.com/problem.php?pid=1165
题目描述:
读入数据string[ ],然后读入一个短字符串。要求查找string[ ]中和短字符串的所有匹配,输出行号、匹配字符串。匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aa1bb、aa2bb、aa3bb都算匹配。
输入:
输入有多组数据。
每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(不含空格),接下来输入一个匹配字符串。
输出:
输出匹配到的字符串的行号和该字符串(匹配时不区分大小写)。
样例输入:
4
Aab
a2B
ab
ABB
a[a2b]b
样例输出:
1 Aab
2 a2B
4 ABB
#include <string> #include <iostream> using namespace std; string s[1002], S[1002], t, temp; string upper(string str){ int i, l=str.length(); for(i=0; i<l; i++) if(str[i]>='a'&&str[i]<='z') str[i] += ('A'-'a'); //cout << str << endl;// return str; } int main() { int i, j, l, k, m, n; int start, end; freopen("1165.txt","r",stdin);// while( cin >> n ){ for( i=1; i<=n; i++ ){ cin >> s[i]; S[i] = upper(s[i]); } cin >> t; t = upper(t); start = t.find("["); //cout << "start = " << start << endl; if( start == -1 ){ for( i=1; i<=n; i++ ) if( S[i]==t ) cout << i << ' ' << s[i] << endl; } else{ end = t.find(']'); //cout << "end = " << end << endl; l = end - start; string *tt = new string[l]; for(i=start+1, j=1; i<end; i++, j++){ tt[j] = t; temp = t[i]; tt[j].replace(start,l+1,temp); //cout << "tt["<<j<<"] = " << tt[j] << endl; } for( i=1; i<=n; i++ ) for( j=1; j<l; j++ ) if( S[i]==tt[j] ){ cout << i << ' ' << s[i] << endl; break; } } } return 0; }