程序设计竞赛文档格式.docx
- 文档编号:19815969
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:11
- 大小:17.25KB
程序设计竞赛文档格式.docx
《程序设计竞赛文档格式.docx》由会员分享,可在线阅读,更多相关《程序设计竞赛文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
(30分)
代码如下:
#include<
iostream>
cstdio>
cmath>
usingnamespacestd;
inttoTen(intstr[]){
inti=0;
for(intj=0;
j<
8;
j++){
i=i+str[j]*(int)pow(2,7-j);
}
returni;
}
voidto32Ip(intsecondIp[32],intp[]){
inta[8];
for(inti=0;
i<
4;
i++){
toSecond(p[i],a);
secondIp[i*8+j]=a[j];
voidtoIp(intp[]){
a[j]=p[i*8+j];
p[i]=toTen(a);
voidtoSecond(inti,intstr[]){
intcount=7;
while(!
(i==1||i==0)){
str[count]=i%2;
i=i/2;
count=count-1;
for(;
count>
0;
count--){
str[count]=0;
str[0]=i;
voidmain(){
inti;
intip[3][4];
intsecondIp1[32];
intsecondIp2[32];
intsecondIp3[32];
intdizhi[32];
for(i=0;
3;
scanf("
%d.%d.%d.%d"
&
ip[i][0],&
ip[i][1],&
ip[i][2],&
ip[i][3]);
//cout<
<
ip[i][0]<
"
."
ip[i][1]<
ip[i][2]<
ip[i][3]<
endl;
to32Ip(secondIp1,ip[0]);
to32Ip(secondIp2,ip[1]);
to32Ip(secondIp3,ip[2]);
32;
if(!
(secondIp1[i]==secondIp2[i]&
&
secondIp1[i]==secondIp3[i]))
break;
yanma[i]=1;
dizhi[i]=secondIp1[i];
yanma[i]=0;
dizhi[i]=0;
toIp(yanma);
toIp(dizhi);
cout<
网络地址为:
dizhi[0]<
dizhi[1]<
dizhi[2]<
dizhi[3]<
子网掩码为:
yanma[0]<
yanma[1]<
yanma[2]<
yanma[3]<
2.输入一个包含“()”和“[]”的括号序列,判断是否合法。
具体规则如下:
1)空串合法。
2)如果A和B都合法,则AB合法。
3)如果A合法,则(A)和[B]都合法。
(40分)
程序代码实现如下:
#include<
stdio.h>
#include<
stdlib.h>
#defineMAXSIZE1024
typedefstruct
{
chardata[MAXSIZE];
inttop;
}*stack,Stack;
stackinit()
stackt;
t=(Stack*)malloc(sizeof(Stack));
t->
top=-1;
returnt;
intisEnpty(stackt)
if(t->
top==-1)
return1;
else
return0;
intpush(stackt,charc)
top==MAXSIZE)
{
t->
top++;
data[t->
top]=c;
intpop(stackt)
charx;
if(isEnpty(t))
x=t->
top];
top--;
charlook_top(stackt)
returnx;
voidmain()
chara[MAXSIZE];
stackt1,t2;
charx1;
%s"
a);
t2=init();
t1=init();
while
(1)
if(a[i]=='
('
||a[i]=='
)'
['
]'
{'
}'
)
push(t1,a[i]);
i++;
\0'
break;
if(isEnpty(t1))
printf("
Yes\n"
);
//没有括号
while
(1)
{
x1=look_top(t1);
if(x1=='
||x1=='
{
push(t2,x1);
pop(t1);
}
else
if((x1=='
look_top(t2)=='
)||(x1=='
))
{
pop(t1);
pop(t2);
}
else
push(t2,x1);
//printf("
%d"
t2->
top);
if(isEnpty(t1))
break;
}
}
if(isEnpty(t2))
printf("
YES\n"
NO\n"
system("
pause"
3.给出正整数n,则1到n这n个数可以构成n!
种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出123,132,213,231,312,321六个排列。
给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列123。
比如:
n=3,k=2给出排列231,则它的下1个排列为312,下2个排列为321,因此答案为321。
程序实现代码如下:
intq;
intequil(ints[intn])//判断数组里的各元素是否互异
{
n-1;
i++)
if(s[i]==s[i+1])
return0;
return1;
intcompare(inta[intn],intc[ints][intn])//判断两串数据是否一样
n;
if(a[i]!
=c[s][i])
intarr(intc[intn],inta[ints][intn])//输入n个数的一个排列并放入才c[n]中,再从a[s][n]中找出这个排列的位置
inti,j;
printf("
请输入一个排列:
\n"
%d"
c[i]);
queue(a[s][n];
s;
for(j=0;
j++)
if(compare(a[n],c[i][n]))
p=i;
q=p;
if(q==p)
returnp;
voidqueue(inta[ints][intn])//获取1到n这n个数按从小到大顺序的所有排列
intb[n],j,i,t;
intsum=0;
a[0][i]=i+1;
sum=10*sum+i;
for(i=1;
;
sum++)
t=sum;
for(j=n-1;
j>
=0;
j--)
{
b[j]=sum%10;
sum=sum/10;
if(equil(b[n]))
a[i][j]=b[j];
sum=t;
main()
intn,k,m,i,s;
请输入组数:
%d\n"
m);
m;
请输入排列的个数:
n);
for(i=1,s=1;
=n;
s=s*i;
inta[s][n],c[n];
请输入第后多少个排列:
k);
q=arr(c[n],a[s][n]);
//调用函数arr()
a[q+k][i]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 竞赛