您好,欢迎访问三七文档
1题目-满足条件的数累加来源元培-FromWhf描述将正整数m和n之间(包括m和n)能被17整除的数累加。其中,mn关于输入1行内输入整数m和n,其间,以空格间隔;关于输出累加的结果例子输入5085例子输出204#includestdio.hintmain(){intm,n,i,s=0;scanf(%d%d,&m,&n);for(i=m;i=n;i++){if(i%17==0)s+=i;}printf(%d,s);}2题目-最长最短单词来源计概描述输入1行单词,单词之间有一个空格,试输出第1个最长的单词和第1个最短单词。如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。关于输入两行,第一行,一个整数n,表示单词数目(n200)第二行,空格分开的n个单词。关于输出两行输出第1行,第一个最长的单词第2行,第一个最短的单词例子输入9IamstudyingProgramminglanguageCinPekingUniversity例子输出ProgrammingI#includestdio.hintmain(){chara[5000]={0},b[200][20]={0};inti,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;}elseb[i][j++]=a[k];c[i]=j;n=i;p=q=0;max=min=c[0];for(i=1;i=n;i++)if(c[i]max){max=c[i];p=i;}elseif(c[i]min&&c[i]0){min=c[i];q=i;}puts(b[p]);puts(b[q]);}3题目-n-gram串频统计来源元培-FromWhf描述在文本分析中常用到n-gram串频统计方法,即,统计相邻的n个单元(如单词、汉字、或者字符)在整个文本中出现的频率。假设有一个字符串,请以字符为单位按n-gram统计长度为n的子串出现的频度,并输出最高频度以及频度最高的子串。设定所给的字符串不多于500个字符,且1n5。如果有多个子串频度最高,则根据其在序列中第一次出现的次序输出多个,每行输出一个,如果最高频度不大于1,则输出NO例如,n=3,所给的串是:abcdefabcd,则,所有的3-gram是:abc,bcd,cde,def,efa,fab,abc,bcd。最后面的cd不足以形成3-gram,则不考虑。这样,abc和bcd都出现了2次,其余的只出现了1次,于是,输出结果应该是:2abcbcd关于输入第一行为n第二行为字符串关于输出输出最高频度以及频度最高的所有子串。例子输入3abcdefabcd例子输出2abcbcd#includestdio.h#includestring.hintmain(){chara[510]={0},b[500][6]={0};intl,i,j,n,m=0,c[500]={0},s;scanf(%d\n,&n);gets(a);l=strlen(a);for(i=0;i=l-n;i++)for(j=0;jn;j++)b[i][j]=a[i+j];for(i=0;i=l-n;i++){s=1;for(j=0;ji;j++)if(c[j]!=-1)if(strcmp(b[j],b[i])==0){s=0;c[j]+=1;c[i]=-1;break;}if(s)c[i]+=1;}for(i=0;i=l-n;i++)if(c[i]m)m=c[i];if(m==1)printf(NO);else{printf(%d\n,m);for(i=0;i=l-n;i++)if(c[i]==m)puts(b[i]);}}4题目-提取数字串按数值排序来源元培-FromWhf描述输入一串不超过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#includestdio.h#includestring.hintmain(){chara[350]={0};inti=-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]58)if(t==-1){i++;t=a[k]-48;}elset=t*10+a[k]-48;elseif(t!=-1){b[i]=t;t=-1;}if(t!=-1)b[i]=t;n=i;if(i==-1)printf(0);else{for(i=n;i0;i--)for(j=0;ji;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=n;i++){printf(%d,b[i]);u--;if(u=0)printf(,);}}}5题目-降序生成进制数来源元培-FromWhf描述按从大到小顺序依次输出m(0)个n位(0)的k(1k10)进制数,注意:(1)如果实际的n位k进制数不够m个,则按实际个数输出。例如:想输出88个4位3进制数,但所有4位3进制总共只有81个,因此,只需输出81个即可;(2)如果实际的n位k进制数多于m个,则输出最大的m个。假定n小于30位,m可以用整数表示。关于输入m,n和k在一行内输入,空格间隔关于输出输出的两个数之间用逗号间隔,如果输出的结果多于6个数,则分多行输出,每行输出6个值,最后一行可以少于6个(每行的最后一个数之后没有逗号)。例子输入8843例子输出2222,2221,2220,2212,2211,22102202,2201,2200,2122,2121,21202112,2111,2110,2102,2101,21002022,2021,2020,2012,2011,20102002,2001,2000,1222,1221,12201212,1211,1210,1202,1201,12001122,1121,1120,1112,1111,11101102,1101,1100,1022,1021,10201012,1011,1010,1002,1001,10000222,0221,0220,0212,0211,02100202,0201,0200,0122,0121,01200112,0111,0110,0102,0101,01000022,0021,0020,0012,0011,00100002,0001,0000#includestdio.hintmain(){inta[35]={0};ints=1,m,n,k,i,t=0;scanf(%d%d%d,&m,&n,&k);for(i=0;in;i++)a[i]=k-1;if(n==1){m=mk?m:k;for(;;){printf(%d,a[0]);if(--m=0)break;if(++t%6==0)printf(\n);elseprintf(,);a[0]-=1;}}elsefor(;;){for(i=0;in;i++)printf(%d,a[i]);if(--m=0)break;if(a[n-1]0)a[n-1]-=1;else{a[n-1]+=k-1;a[n-2]-=1;for(i=n-2;i0;i--)if(a[i]0){a[i]+=k;a[i-1]-=1;}}if(a[0]0)break;if(++t%6==0)printf(\n);elseprintf(,);}}6题目-最大零矩阵来源元培-FromWhf描述有一个二位数组m(100)行,n(100)列,其元素为不大于100的非负整数。现要找元素值均为0的最大子二维数组,其中行相邻,列也相邻,行数与列数之积最大(即,所含0元素最多),输出该最大积。例如:25008111530000121670000131780071141840000006000000这是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。例子输入6725008111530000121670000131780071141840000006000000例子输出12#includestdio.h#includestring.hintmain(){inta[101][101],i,j,k,l,m,n,u,v=0,p,q,t;scanf(%d%d,&m,&n);for(i=0;im;i++)for(j=0;jn;j++)scanf(%d,&a[i][j]);for(i=0;im;i++)for(j=0;jn;j++)if(a[i][j]==0){for(k=i;km;k++)for(l=j;ln;l++)if(a[k][l]==0){t=1;for(p=i;p=k;p++)for(q=j;q=l;q++)if(a[p][q]!=0){t=0;break;break;}if(t){u=(k-i+1)*(l-j+1);if(uv)v=u;}}}printf(%d,v);}1题目-中间值判断来源元培-FromWhf描述任意给定n个整数(n不大于100),这n个整数中的最小值min和最大值max确定了整数序列的左右边界。在这n个整数中,是否存在以最小值min和最大值max为左右边界的中间值。如果存在,则输出YES,否则,输出NO。例如:三个数1,3,5,则左边界是1,右边界是5,中间位置的值=(1+5)/2=3,出现在序列中。同样,如果是三个数1,3,6,中间值是3或者4,此时的3已出现,也成立。但是,如果是三个数1,2,6,则没有出现中间值。关于输入第一行:整数个数n;第二行:n个整数,其间以空格间隔;如:61-225-69左右边界点分别是[-6,9]中间点为1和2,均出现。关于输出如果出现,则输出YES否则,输出NO例子输入61-225-69例子输出YES#includestdio.h#includestring.hintmain(){inta[101]={0},i,t,n,min,max,s=0;scanf(%d,&n);scanf(%d,&a[0]);min=max=a[0];for(i=1;in;i++){scanf(%d,&a[i]);if(a[i]max)max=a[i];elseif(a[i]min)min=a[i];}if((max+min)%2==0){t=(max+min)/2;for(i=0;in;i++)if(a[i]==t){s=1;break;}}else{t=(max+min)/2;for(i=0;in;i++)if((a[i]==t)||(a[i]==t+1)){s=1;break
本文标题:北大元培计算机模拟
链接地址:https://www.777doc.com/doc-2623875 .html