积分赛制
答对一个空格得5分
一、【题目】(哥德巴赫猜想)哥德巴赫猜想是指,任一大于2的偶数都可写成两个质数之和。迄今为止,这仍然是一个著名的世界难题,被誉为数学王冠上的明珠。试编写程序,验证任一大于2且不超过n的偶数都能写成两个质数之和。
#include<iostream>
using namespace std;
int main()
{
const int SIZE=1000;
int n,r,p[SIZE],i,j,k,ans;
bool tmp;
cin>>n;
r=1;
p[1]=2;
for(i=3;i<=n;i++)
{
① ;
for(j=1;j<=r;j++)
if(i% ② ==0)
{
tmp=false;
break;
}
if(tmp)
{
r++;
③ ;
}
}
ans=0;
for(i=2;i<=n/2;i++)
{
tmp=false;
for(j=1;j<=r;j++)
for(k=j;k<=r;k++)
if(i+i== ④ )
{
tmp=true;
break;
}
if(tmp)
ans++;
}
cout<<ans<<endl;
return 0;
}
若输入n为2010,则输出 ⑤ 时表示验证成功,即大于2且不超过2010的偶数都满足哥德巴赫猜想。
二、【题目】(排列数)输入两个正整数n,m(1<n<20,1<m<n),在1~n中任取m个数,按字典序从小到大输出所有这样的排列。例如:
输入:3 2
输出:1 2
1 3
2 1
2 3
3 1
3 2
#include <iostream>
#include <cstring>
using namespace std;
const int SIZE =25;
bool used[SIZE];
int data[SIZE];
int n,m,i,j,k;
bool flag;
int main()
{
cin>>n>>m;
memset(used,false,sizeof(used));
for(i=1;i<=m;i++)
{
data[i]=i;
used[i]=true;
}
flag=true;
while(flag)
{
for(i=1;i<=m-1;i++) cout<<data[i]<<" ";
cout<<data[m]<<endl;
flag= ① ;
for(i=m;i>=1;i--)
{
② ;
for(j=data[i]+1;j<=n;j++)
if(!used[j])
{
used[j]=true;
data[i]= ③ ;
flag=true;
break;
}
if(flag)
{
for(k=i+1;k<=m;k++)
for(j=1;j<= ④ ;j++)
if(!used[j])
{
data[k]=j;
used[j]=true;
break;
}
⑤ ;
}
}
}
return 0;
}
三、
【题目】
(数字删除)下面程序的功能是将字符串中的数字字符删除后输出。请填空。(每空3分,共12分)
#include <iostream>
using namespace std;
int delnum(char *s)
{
int i, j;
j = 0;
for(i = 0; s[i] != '\0'; i++)
if(s[i] < '0' ——————1—————— s[i] > '9')
{
s[j] = s[i];
——————2——————;
}
return ——————3——————;
}
const int SIZE = 30;
int main()
{
char s[SIZE];
int len, i;
cin.getline(s, sizeof(s));
len = delnum(s);
for(i = 0; i < len; i++)
cout << ——————4——————);
cout << endl;
return 0;
}
四、
【题目】(打印月历)输入月份m(1≤m≤12),按一定格式打印2015年第m月的月历。(第三、四空2.5分,
其余3分)
例如,2015年1月的月历打印效果如下(第一列为周日):
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
#include <iostream>
#include <string>
using namespace std;
const int dayNum[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int m, offset, i;
int main()
{
cin >> m;
cout << "S\tM\tT\tW\tT\tF\tS" << endl; //'\t'为TAB制表符
⑴ ;
for(i = 1; i < m; i++)
offset = ⑵ ;
for(i = 0; i < offset; i++)
cout << '\t';
for(i = 1; i <= ⑶ ; i++)
{
cout << ⑷ ;
if(i == dayNum[m] || ⑸ == 0)
cout << endl;
else
cout << '\t';
}