const int SIZE = 100;
int main()
{
int p[SIZE];
int n, tot, i, cn;
tot = 0;
cin >> n;
for(i = 1; i <= n; i++)
p[i] = 1;
for(i = 2; i <= n; i++)
{
if(p[i] == 1)
tot++;
cn = i * 2;
while(cn <= n)
{
p[cn] = 0;
cn += i;
}
}
cout << tot << endl;
return 0;
}
输入:30
输出: 10
四、完善程序(共2题,共计28分)
1.(数字删除)下面程序的功能是将字符串中的数字字符删除后输出。请填空。(每空3分,共12分) #include <iostream>
using namespace std;
int delnum(char *s)
{
int i, j;
j = 0;
for(i = 0; s[i] != '\0'; i++)
NOIP2014初赛普及组试题
if(s[i] < '0' || s[i] > '9')
{
s[j] = s[i];
j++;
}
return j;
}
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 << s[i];
cout << endl;
return 0;
}
2.(最大子矩阵和)给出m行n列的整数矩阵,求最大的子矩阵和(子矩阵不能为空)。
输入第一行包含两个整数m和n,即矩阵的行数和列数。之后m行,每行n个整数,描述整个矩阵。程序最终输出最大的子矩阵和。(最后一空4分,其余3分,共16分)
比如在如下这个矩阵中:
4 4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
拥有最大和的子矩阵为:
9 2
-4 1
-1 8
其和为15
3 3
-2 10 20
-1 100 -2
0 -2 -3
最大子矩阵和为128
4 4
0 -2 -9 -9
-9 11 5 7
-4 -3 -7 -6
-1 7 7 5
最大子矩阵和为26
#include <iostream>
using namespace std;
NOIP2014初赛普及组试题
const int SIZE = 100;
int matrix[SIZE + 1][SIZE + 1];
int rowsum[SIZE + 1][SIZE + 1]; //rowsum[i][j]记录第i行前j个数的和 int m, n, i, j, first, last, area, ans;
int main()
{
cin >> m >> n;
for(i = 1; i <= m; i++)
for(j = 1; j <= n; j++)
cin >> matrix[i][j];
ans = matrix[1][1];
for(i = 1; i <= m; i ++)
rowsum[i][0] = 0;
for(i = 1; i <= m; i++)
for(j = 1; j <= n; j++)
rowsum[i][j] = rowsum[i][j - 1] + matrix[i][j];
for(first = 1; first <= n; first++)
for(last = first; last <= n; last++)
{
area = 0;
for(i = 1; i <= m; i++)
{
area += rowsum[i][last] - rowsum[i][first - 1]; if(area > ans)
ans = area;
if(area < 0)
area = 0;
}
}
cout << ans << endl;
return 0;
}