北大元培计算机模拟由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“北大青鸟计算机培训”。
题目最长最短单词
来源 计概
描述
输入1行单词,单词之间有一个空格,试输出第1个最长的单词和第1个最短单词。
如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。
关于输入 两行,第一行,一个整数n,表示单词数目(n
关于输出
两行输出
第1行,第一个最长的单词
第2行,第一个最短的单词
例子输入I am studying Programming language C in Peking University
例子输出
Programming I
#include int main(){ char a[5000]={0},b[200][20]={0};int i,j,n,p,q,max,min,c[200]={0},k;gets(a);for(k=0,i=0,j=0;a[k]!=0;k++)
if(a[k]==','||a[k]==' '){c[i++]=j;j=0;}
else b[i][j++]=a[k];c[i]=j;n=i;p=q=0;max=min=c[0];for(i=1;i
if(c[i]>max){max=c[i];p=i;}
else if(c[i]0){min=c[i];q=i;} puts(b[p]);puts(b[q]);}题目提取数字串按数值排序
来源 元培-From Whf 描述
输入一串不超过300个字符的符号序列,请将其中的所有数字串提出,并将每个数字串作为整数看待(假设可以用int 表示),按从小到大顺序输出结果,输出的整数之间以逗号间隔。如果没有数字,则输出0;例如:*1234.345#6781ad9jk81-11101?aght88ir09kp,其中的整数包括:1234,345,6781,9,81,11101,88,9,从小到大排序后,应该输出:
9,9,81,88,345,1234,6781,11101
关于输入
在一行内输入一串符号
关于输出
从小到大排序的整数序列,如果没有数字,则输出0;
例子输入
*1234.345#6781ad9jk81-11101?aght88ir09kp
例子输出
9,9,81,88,345,1234,6781,11101
#include #include int main(){ char a[350]={0};int i=-1,j,t=-1,n,b[350]={0},k,s,u;gets(a);for(k=0;a[k]!=0;k++)
if(a[k]>47&&a[k]
else t=t*10+a[k]-48;
else if(t!=-1){b[i]=t;t=-1;} if(t!=-1)b[i]=t;n=i;if(i==-1)printf(“0”);else{for(i=n;i>0;i--)
for(j=0;j
if(b[j]>b[j+1]){s=b[j];b[j]=b[j+1];b[j+1]=s;};u=n;for(i=0;i=0)printf(“,”);}} }题目最大零矩阵
来源 元培-From Whf 描述
有一个二位数组 m(
5 0 0 8 11 15 3 0 0 0 0 12 16 7 0 0 0 0 13 17 8 0 0 7 1 14 18 4 0 0 0 0 0
0 6 0 0 0 0 0
0
这是6行,7列构成的二维数组,其中:由第4~5行(最后2行),第1~6列(最后6列)构成的子数组最大,共有12个0元素,因此,应该输出 12。其它情况下的子数组都不多于12个0元素,例如,第1~5行与第1~2列构成子数组为第二大数组,含有10个0元素。
关于输入
第一行,m 和 n 的值,以空格间隔,m 和 n 均为 不大于 100 的正整数
之后,共 m 行,每行共 n 个元素,其间用空格间格。
关于输出
输出,最大零元素子二维数组所含的 0 元素个数,如果没有0元素,则输出0。
例子输入7 2 5 0 0 8 11 15 3 0 0 0 0 12 16 7 0 0 0 0 13 17 8 0 0 7 1 14 18 4 0 0 0 0 0
0 6 0 0 0 0 0
0
例子输出
#include #include int main(){ int a[101][101],i,j,k,l,m,n,u,v=0,p,q,t;scanf(“%d%d”,&m,&n);for(i=0;i
for(j=0;j
scanf(“%d”,&a[i][j]);for(i=0;i
for(j=0;j
if(a[i][j]==0){ for(k=i;k
for(l=j;l
if(a[k][l]==0){t=1;for(p=i;p
for(q=j;q
if(a[p][q]!=0){t=0;break;break;}
if(t){u=(k-i+1)*(l-j+1);if(u>v)v=u;}}} printf(“%d”,v);
}题目判断整数的奇偶性
来源 元培-From Whf 描述
有一串长度不超过500的符号序列,其中有数字和非数字。请将其中的数字顺次拼起来,形成一个大的非负整数,判断该整数是奇数还是偶数。若是奇数,则输出 ODD;若是偶数,输出 EVEN。如果整个串中没有数字,则输出 NO。
关于输入
一串长度不超过500的符号序列。
关于输出
输出拼成的整数,给出逗号后再输出是奇数还是偶数。如果输入序列中没有任何数字出现,则只输出 NO。
注意:如果拼成的整数大于0,则输出的整数第一位不得是0,如果拼成的整数为 0,则输出为:
0,EVEN
例子输入
kad0hskh01x,nnxv31kklk20xcmxc89k6zxjcnm3cjk
例子输出
131208963,ODD
#include #include int main(){ char c,d;int s=0,t=0;while((c=getchar())!='n'){
if(c>47&&c
if(s==0)s=1;
if(s==1)if(t==0)if(c!=48)t=1;
} if(t)putchar(c);}};if(s==0)printf(“NO”);else if(t==0)printf(“0,EVEN”);else if(d%2==0)printf(“,EVEN”);else printf(“,ODD”);题目最简真分数序列
来源 元培-From Whf 描述
所谓最简真分数是指分子小于分母,且不能约分的分数。给定 n(1
关于输入
第1行为正整数个数n
其后为n个非负整数,空格间隔。
关于输出
输出所有最简真分数,分子小的排在前面;若分子相同,分母小的排在前面。各分数之间用逗号间隔。
若没有,则输出NO
例子输入3 7 11 0 5 13 15 9
例子输出
3/5,3/7,3/11,3/13,5/7,5/9,5/11,5/13,7/9,7/11,7/13,7/15,9/11,9/13,11/13,11/15,13/15
#include #include int f(int i,int j){ if(i%j==0)return(j);else return(f(j,i-i/j*j));} int main(){ int a[201]={0},b[201]={0},i,j,n,p,t=0,s=0;scanf(“%d”,&n);for(i=0;i
scanf(“%d”,&a[i]);for(i=n-1;i>=0;i--)
for(j=0;j
if(a[j]>a[j+1])
{p=a[j];a[j]=a[j+1];a[j+1]=p;} if(a[0]>0)b[t++]=a[0];for(i=1;i
if(a[i]!=a[i-1])b[t++]=a[i];for(i=0;i
for(j=i+1;j
if(f(b[i],b[j])==1){
if(s)printf(“,”);
printf(“%d/%d”,b[i],b[j]);
s=1;} if(s==0)printf(“NO”);}题目最长等差数列子集
来源 元培-From Whf 描述
一个等差数列是指以增序排列后,相邻的两个数后一个与前一个数之差值恒定。规定一个等差数列中的数不应少于3个。任给 n(2
例如,有10个元素:20,14,6,15,22,7,23,8,18,25
从6开始的最长等差数列是:6,7,8 和 6,14,22 从7开始的最长等差数列是:7,15,23
从8开始的最长等差数列是:8,14,20 和 8,15,22 从14开始的最长等差数列是:14,18,22 从15开始的最长等差数列是:15,20,25 从18开始的最长等差数列是:18,20,22
上述7个最长序列中,长度都为3。按差值看,6,14,22 和 7,15,23 同时最大,但 7 > 6,因此,结果应该选 7,15,23
关于输入
2行:
第1行,n,表示整数个数;
第2行,n 个正整数,空格间隔;
关于输出
按增序输出最长等差数列子集,逗号间隔。
例子输入20 14 6 15 22 7 23 8 18 25
例子输出
7,15,23
#include #include int f(int a[],int n,int i,int j){ int k,s=0;for(k=j+1;k
if(a[k]+a[i]>a[j]*2)break;
else if(a[k]+a[i]==a[j]*2){s=1;break;} if(s)return(f(a,n,j,k)+1);else return(2);} int main(){ int a[5001]={0},d,l=0,b,i,j,t,s=0,n,p,m=0;
scanf(“%d”,&n);for(i=0;i
scanf(“%d”,&a[i]);for(i=n-1;i>=0;i--)
for(j=0;j
if(a[j]>a[j+1])
{p=a[j];a[j]=a[j+1];a[j+1]=p;} for(i=0;i
for(j=i+1;jn+1-l)break;
if(a[i]+(l-1)*(a[j]-a[i])>a[n-1])continue;
t=f(a,n,i,j);
if(t>l){l=t;d=a[j]-a[i];b=a[i];}
else if(t==l&&a[j]-a[i]>d){d=a[j]-a[i];b=a[i];}
else if(t==l&&a[j]-a[i]==d&&a[i]>b)b=a[i];} if(l>2)for(i=0;i