1.
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1005],f[1005];
int main() {
int i, j;
cin>> n; int ans=0;
for (i=0; i<n; i++)cin>>a[i];
for (i=0; i<n; ++i) {
f[i] = 1;
for(j= i-1; j>=0; --j)
if(a[i]>a[j])f[i]= max(f[i],f[j]+1);
ans =max(ans,f[i]);
}
cout<< ans<<"\n";
return 0;
}
输入保证是正整数n以及一个长度为n的数组,且相邻元素之间没有空格。如下例:
判断题
1) 若将第6行的“int i,j”改为“int i;”,则程序会出现编译错误。( )
2) 若将第12行的a[i]>a[j]改为a[i]<a[j],运行结果不变。( )
3) f[i]表示以i结尾的最长不下降子序列长度。( )
4) 若把第9行的"i=0;"换成"i=1;",则程序运行结果不变。( )
选择题
5) 若n= 100,则ans的最大值是( )。
6) 若n=15,a= {5,7,6,8,1,3,5,4,2,9,14,11,12,8,7},则ans的值为( )
3.
#include <stdio.h>
char c[200][200];
int s[200], m, n;
void numara() {
int i,j, cod, nr;
for(j=0; j<n; j++) {
nr=0; cod=1;
for(i=0; i<m; i++) {
if(c[i][j]=='1') {
if(!cod) {cod=1;s[nr]++;nr=0;}
}
else {
if (cod) {nr=1;cod=0;}
else nr++;
}
}
if(!cod) s[nr]++;
}
}
int main() {
int i,j;
scanf("%d %d\n", &m, &n);
for(i= 0; i<m; i++) gets(c[i]);
numara();
for(i=1; i<=m; i++)
if(s[i]!= 0) printf("%d %d",i, s[i]);
return 0;
}
输入保证是正整数m和n以及一个m*n的01矩阵,且相邻元素之间没有空格。如
下例:
2 4
0101
1000
判断题
1) 若将第21行的“int i,j;”改为“int i;”,则程序会出现编译错误。()
2) 程序最少输出0个数,最多输出2*m个数。()
3) s[i]表示矩阵中有s[i]个列有i个0。( )
4) 若把第10行的“cod=1;”和第13行的“cod=0;”全部换成“cod^=1;”,则程序运行结果不变。( )
选择题
5) 若m=100,n=100,则s[1]的最大值是( )。
6) 若m=95,n=95,则s[5]的最大值是( )。