PAT/B/1013
这道题,除了输出,有点新意以外没有什么需要注意的,不过让我很尴尬的是一开始题目读错了,读成了把输入的m,n,读成了范围,实际上是序号。如下代码:
#include <iostream>
#include <vector>
using namespace std;
bool isPre(int n)
{
for(int i=2;i*i<=n;++i)
{
if(n%i==0) return 0;
}
return 1;
}
int main()
{
int m,n,flag=0;
cin>>m>>n;
for(int i=m;i<=n;++i)
{
if(isPre(i))
{
if(!flag) cout<<i;
else cout<<" "<<i;
++flag;
if(flag==10) {
cout<<endl;
flag=0;
}
}
}
return 0;
}
接下来是正确的代码:
#include <iostream>
#include <vector>
using namespace std;
bool isPri(int n)
{
for(int i=2;i*i<=n;++i)
{
if(n%i==0) return 0;
}
return 1;
}
int main()
{
vector <int> v;
int m,n,flag=0;
cin>>m>>n;
int count=0,idex=2;
while(count<n)
{
if(isPri(idex))
{
v.push_back(idex) ;
count++;
}
++idex;
}
for(int i=m-1;i<v.size();++i)
{
if(!flag) cout<<v[i];
else cout<<" "<<v[i];
++flag;
if(flag==10) {
cout<<endl;
flag=0;
}
}
return 0;
}
liuchuo大神:
#include <iostream>
#include <vector>
using namespace std;
bool isprime(int a) {
for (int i = 2; i * i <= a; i++)
if(a % i == 0) return false;
return true;
}
int main() {
int M, N, num = 2, cnt = 0;
cin >> M >> N;
vector<int> v;
while (cnt < N) {
if (isprime(num)) {
cnt++;
if (cnt >= M) v.push_back(num);
}
num++;
}
cnt = 0;
for (int i = 0; i < v.size(); i++) {
cnt++;
if (cnt % 10 != 1) printf(" ");//我认为用余数就很妙
printf("%d", v[i]);
if (cnt % 10 == 0) printf("\n");
}
return 0;
}
PAT/A/1001
不愧是Advance的题目,我现在做还是有点吃力的,复习了一下string库里的,我觉得我还是有点幸运的,刚好测试案例恰好是我漏掉的解,加上两个补充if就可以了
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
string c;
c=to_string(a+b);
// cout<<c<<endl;
// cout<<c.size()<<endl;
int count=0;
if(c[0]=='-')
{cout<<c[0];
count=3-((c.size()-1)%3);
if(count==3) count=0;
for(int i=1;i<c.size() ;++i)
{
if(count==3)
{
cout<<',';
count=0;
}
cout<<c[i];
count++;
}
}
else {
count=3-(c.size()%3);
if(count==3) count=0;
for(int i=0;i<c.size() ;++i)
{
if(count==3)
{
cout<<',';
count=0;
}
cout<<c[i];
count++;
}
}
return 0;
}
liuchuo大神:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
string s = to_string(a + b);
int len = s.length();
for (int i = 0; i < len; i++) {
cout << s[i];
if (s[i] == '-') continue;
if ((i + 1) % 3 == len % 3 && i != len - 1) cout << ",";
}
return 0;
}