北大元培计算机模拟Word文档格式.docx

上传人:b****2 文档编号:1284868 上传时间:2023-04-30 格式:DOCX 页数:25 大小:22.06KB
下载 相关 举报
北大元培计算机模拟Word文档格式.docx_第1页
第1页 / 共25页
北大元培计算机模拟Word文档格式.docx_第2页
第2页 / 共25页
北大元培计算机模拟Word文档格式.docx_第3页
第3页 / 共25页
北大元培计算机模拟Word文档格式.docx_第4页
第4页 / 共25页
北大元培计算机模拟Word文档格式.docx_第5页
第5页 / 共25页
北大元培计算机模拟Word文档格式.docx_第6页
第6页 / 共25页
北大元培计算机模拟Word文档格式.docx_第7页
第7页 / 共25页
北大元培计算机模拟Word文档格式.docx_第8页
第8页 / 共25页
北大元培计算机模拟Word文档格式.docx_第9页
第9页 / 共25页
北大元培计算机模拟Word文档格式.docx_第10页
第10页 / 共25页
北大元培计算机模拟Word文档格式.docx_第11页
第11页 / 共25页
北大元培计算机模拟Word文档格式.docx_第12页
第12页 / 共25页
北大元培计算机模拟Word文档格式.docx_第13页
第13页 / 共25页
北大元培计算机模拟Word文档格式.docx_第14页
第14页 / 共25页
北大元培计算机模拟Word文档格式.docx_第15页
第15页 / 共25页
北大元培计算机模拟Word文档格式.docx_第16页
第16页 / 共25页
北大元培计算机模拟Word文档格式.docx_第17页
第17页 / 共25页
北大元培计算机模拟Word文档格式.docx_第18页
第18页 / 共25页
北大元培计算机模拟Word文档格式.docx_第19页
第19页 / 共25页
北大元培计算机模拟Word文档格式.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

北大元培计算机模拟Word文档格式.docx

《北大元培计算机模拟Word文档格式.docx》由会员分享,可在线阅读,更多相关《北大元培计算机模拟Word文档格式.docx(25页珍藏版)》请在冰点文库上搜索。

北大元培计算机模拟Word文档格式.docx

Programming

I

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;

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串频统计

在文本分析中常用到n-gram串频统计方法,即,统计相邻的n个单元(如单词、汉字、或者字符)在整个文本中出现的频率。

假设有一个字符串,请以字符为单位按n-gram统计长度为n的子串出现的频度,并输出最高频度以及频度最高的子串。

设定所给的字符串不多于500个字符,且1<

n<

5。

如果有多个子串频度最高,则根据其在序列中第一次出现的次序输出多个,每行输出一个,如果最高频度不大于1,则输出NO

例如,n=3,所给的串是:

abcdefabcd,

则,所有的3-gram是:

abc,bcd,cde,def,efa,fab,abc,bcd。

最后面的cd不足以形成3-gram,则不考虑。

这样,abc和bcd都出现了2次,其余的只出现了1次,于是,输出结果应该是:

2

abc

bcd

第一行为n

第二行为字符串

输出最高频度以及频度最高的所有子串。

abcdefabcd

abc

bcd

string.h>

chara[510]={0},b[500][6]={0};

intl,i,j,n,m=0,c[500]={0},s;

%d\n"

l=strlen(a);

for(i=0;

=l-n;

for(j=0;

j<

n;

j++)

b[i][j]=a[i+j];

{s=1;

for(j=0;

i;

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;

m)m=c[i];

if(m==1)printf("

NO"

);

else{printf("

m);

if(c[i]==m)puts(b[i]);

4

题目-提取数字串按数值排序

输入一串不超过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;

aght88ir09kp

9,9,81,88,345,1234,6781,11101

chara[350]={0};

inti=-1,j,t=-1,n,b[350]={0},k,s,u;

for(k=0;

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;

i>

0;

i--)

if(b[j]>

b[j+1]){s=b[j];

b[j]=b[j+1];

b[j+1]=s;

};

u=n;

{printf("

b[i]);

u--;

if(u>

=0)printf("

"

}}

5

题目-降序生成进制数

按从大到小顺序依次输出m(>

0)个n位(>

0)的k(1<

k<

10)进制数,

注意:

(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,2210

2202,2201,2200,2122,2121,2120

2112,2111,2110,2102,2101,2100

2022,2021,2020,2012,2011,2010

2002,2001,2000,1222,1221,1220

1212,1211,1210,1202,1201,1200

1122,1121,1120,1112,1111,1110

1102,1101,1100,1022,1021,1020

1012,1011,1010,1002,1001,1000

0222,0221,0220,0212,0211,0210

0202,0201,0200,0122,0121,0120

0112,0111,0110,0102,0101,0100

0022,0021,0020,0012,0011,0010

0002,0001,0000

inta[35]={0};

ints=1,m,n,k,i,t=0;

%d%d%d"

n,&

k);

a[i]=k-1;

if(n==1)

{m=m<

k?

m:

k;

for(;

;

{printf("

a[0]);

if(--m<

=0)break;

if(++t%6==0)printf("

\n"

elseprintf("

a[0]-=1;

}}

elsefor(;

{for(i=0;

i++)printf("

a[i]);

if(a[n-1]>

0)a[n-1]-=1;

else{a[n-1]+=k-1;

a[n-2]-=1;

for(i=n-2;

if(a[i]<

0){a[i]+=k;

a[i-1]-=1;

if(a[0]<

0)break;

6

题目-最大零矩阵

有一个二位数组m(<

100)行,n(<

100)列,其元素为不大于100的非负整数。

现要找元素值均为0的最大子二维数组,其中行相邻,列也相邻,行数与列数之积最大(即,所含0元素最多),输出该最大积。

250081115

300001216

700001317

800711418

4000000

6000000

这是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。

67

250081115

300001216

700001317

800711418

4000000

6000000

12

inta[101][101],i,j,k,l,m,n,u,v=0,p,q,t;

m;

scanf("

a[i][j]);

if(a[i][j]==0){

for(k=i;

k<

for(l=j;

l<

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;

if(t){u=(k-i+1)*(l-j+1);

v)v=u;

}}}

v);

题目-中间值判断

任意给定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个整数,其间以空格间隔;

如:

6

1-225-69

左右边界点分别是[-6,9]

中间点为1和2,均出现。

如果出现,则输出YES

否则,输出NO

1-225-69

YES

inta[101]={0},i,t,n,min,max,s=0;

a[0]);

min=max=a[0];

{scanf("

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;

i++)if(a[i]==t){s=1;

else{t=(max+min)/2;

i++)if((a[i]==t)||(a[i]==t+1)){s=1;

if(s)printf("

YES"

elseprintf("

题目-判断整数的奇偶性

有一串长度不超过500的符号序列,其中有数字和非数字。

请将其中的数字顺次拼起来,形成一个大的非负整数,判断该整数是奇数还是偶数。

若是奇数,则输出ODD;

若是偶数,输出EVEN。

如果整个串中没有数字,则输出NO。

一串长度不超过500的符号序列。

输出拼成的整数,给出逗号后再输出是奇数还是偶数。

如果输入序列中没有任何数字出现,则只输出NO。

如果拼成的整数大于0,则输出的整数第一位不得是0,如果拼成的整数为0,则输出为:

0,EVEN

kad0hskh01x,nnxv31kklk20xcmxc89k6zxjcnm3cjk

131208963,ODD

charc,d;

ints=0,t=0;

while((c=getchar())!

='

\n'

{

if(c>

c<

58){d=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("

elseif(t==0)printf("

0,EVEN"

elseif(d%2==0)printf("

EVEN"

ODD"

题目-与K相关的数

来源元培From-WHF

给定一个正整数K(其中,1<

10),在[M,N]的范围内找出与K相关的所有数X(即,10<

M<

=X<

=N),按从小到大输出这些数。

若不存在这样的数,则输出NULL。

所谓一个数X与K相关,是指这个数一定满足如下三个条件之一:

(1)这个数中含有K;

(2)这个数是K的倍数;

(3)这个数的每位相加的和是K的倍数

K,M,N三个数,彼此之间用逗号间隔。

从小到大输出所有与K相关的数,彼此之间用分号间隔。

若没有满足条件的数,则输出NULL。

3,12,28

12;

13;

15;

18;

21;

23;

24;

27

intk,m=0,n=0,i,s,t,w=0;

%d,%d,%d"

k,&

{intv=0,u=0;

if(i%k==0)v=1;

elsefor(s=i;

s>

{t=s%10;

if(t==k){v=1;

u+=t;

s=s/10;

if(v==0)if(u%k==0)v=1;

if(v){if(w==1)printf("

"

printf("

i);

w=1;

if(w==0)printf("

NULL"

题目-最简真分数序列

所谓最简真分数是指分子小于分母,且不能约分的分数。

给定n(1<

200)个非负整数(每个整数不超过3位),哪两个整数分别作为分子和分母能够构成最简真分数。

输出所有的最简真分数组合;

若没有,则输出NO。

第1行为正整数个数n

其后为n个非负整数,空格间隔。

输出所有最简真分数,分子小的排在前面;

若分子相同,分母小的排在前面。

各分数之间用逗号间隔。

若没有,则输出NO

8

37110513159

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

intf(inti,intj)

if(i%j==0)return(j);

elsereturn(f(j,i-i/j*j));

inta[201]={0},b[201]={0},i,j,n,p,t=0,s=0;

scanf("

for(i=n-1;

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];

if(a[i]!

=a[i-1])b[t++]=a[i];

t;

for(j=i+1;

if(f(b[i],b[j])==1){

if(s)printf("

printf("

%d/%d"

b[i],b[j]);

s=1;

题目-正整数的任意进制转换

将p进制n转换为q进制。

p和q的取值范围为【2,36】,其中,用到的数码按从小到大依次为:

0,1,2,3,4,5,6,7,8,9,A,B,...,Z,不考虑小写字母。

n的长度不超过50位。

三个数之间用逗号间隔。

1+m行,

第1行为m,表示后面有m行,m不小于1.

其后的m行中,每行3个数:

进制p,p进制数n,以及进制q。

三个数之间用逗号间隔

转换后的q进制数。

18,2345678A123,18

15,23456,18

12,2345678,20

16,12345678,23

25,3456AB,21

18,AB1234567,22

2345678A123

114E0

22B7A4

21A976L

7C2136

22JF0G367

voidrun(intd[],intp,intq)

{inti;

200;

d[i]=d[i]*p;

i++){

d[i+1]=d[i+1]+d[i]/q;

d[i]=d[i]%q;

voidmulti(intb[],intd[],inte,intq)

b[i]=b[i]+e*d[i];

{b[i+1]=b[i+1]+b[i]/q;

b[i]=b[i]%q;

intn;

n-->

{charc[200]={0};

inta[200]={0},b[200]={0},d[200]={0},p,q,i,j,s,l;

%d,%s"

p,c);

l=strlen(c)-1;

q=c[l]-48;

if(c[l-1]!

){q+=(c[l-1]-48)*10;

c[l-2]=0;

l=l-3;

else{c[l-1]=0;

l=l-2;

if(p==q)printf("

%s\n"

c);

else{

if(c[l-i]<

58)a[i]=c[l-i]-48;

elsea[i]=c[l-i]-55;

d[0]=1;

multi(b,d,a[0],q);

{run(d,p,q);

multi(b,d,a[i],q);

for(i=199;

if(b[i]!

l=i;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2