校大学生程序设计大赛专业组题目部分题目Word格式.docx
《校大学生程序设计大赛专业组题目部分题目Word格式.docx》由会员分享,可在线阅读,更多相关《校大学生程序设计大赛专业组题目部分题目Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
Orz
YaYaMao
Daxia
EveryOne
*/
#include"
stdio.h"
string.h"
voidmain()
{
chara[60][60],x;
inti=0,j=0,count,z=1;
while((x=getchar())!
='
\n'
)
{
if((x>
a'
&
x<
z'
)||(x>
A'
Z'
))
{
a[i][j]=x;
j++;
a[i][j]='
\0'
;
z=0;
}
else
{if(z==0)
{
i++;
j=0;
z++;
}
}
count=i;
for(i=0;
i<
=count;
i++)
{z=0;
for(j=i;
j>
=0;
j--)
if(!
strcmp(a[i],a[j]))
z++;
if(z==1)
puts(a[i]);
}
/*问题F:
逆序对
76解决:
50
对于一个包含N个非负整数的数组A[1..n],如果有i<
j,且A[i]>
A[j],则称(i,j)为数组A中的一个逆序对。
例如,数组(3,1,4,5,2)的逆序对有(3,1),(3,2),(4,2),(5,2),共4个。
输入包含若干组数据,第一行为一个整数T(0<
T<
20),表示共有T组测试数据。
接下来每组测试数据包括两行,第一行只有一个整数m(0<
m<
=1000),表示数组有m个数,第二行为m个整数,数据之间用空格分隔。
对输入中的每组测试数据,输出一行对应逆序对的个数。
2
5
31452
10
12345678910
4
intk;
inta[60][60],i,j[60],x,y,count;
scanf("
%d"
&
k);
k;
{scanf("
j[i]);
for(x=0;
j[i];
x++)
scanf("
a[i][x]);
{count=0;
for(y=x+1;
y<
y++)
if(a[i][x]>
a[i][y])
count++;
}
printf("
%d\n"
count);
/*问题C:
删除嵌套注释
20解决:
11
chara[60][60];
inti,j,flag=0,count=0;
{flag=0;
gets(a[i]);
for(j=0;
j<
(strlen(a[i]));
j++)
{
if(a[i][j]=='
}'
flag=1;
if(flag)
break;
count=0;
/*as*/
strlen(a[i]);
{if(a[i][j]=='
*'
count++;
if(count==0||count==2)
}
/*问题B:
数根
113解决:
23
数根可以通过把一个数的各个位上的数字加起来得到。
如果得到的数是一位数,那么这个数就是数根。
如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。
如此进行下去,直到得到是一位数为止。
比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。
再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根。
至于说,知道一个数的数根有什么意义?
这样的问题你就别问了。
就算你问了,我也不方便告诉你。
你还是赶紧写程序吧。
输入的第一行为一个整数n,表示有n组测试数据。
接下来有n行,每行一个正整数a(a小于101000)。
对每个正整数a,输出它的数根。
每个结果占据一行。
24
39
6
3
*/
{inta[60],b,i,z;
b);
b;
{
scanf("
a[i]);
{if(a[i]%9==0)
9);
a[i]%9);
}
/*问题A:
让我们来扮演高斯——呵呵,水题
162解决:
103
水题,你听说过吗?
它就是那种你用脚趾头一想就能解决的题目啦!
是不是正中阁下的下怀啊?
你还记得历史上那个大名鼎鼎的高斯吗?
高斯(Gauss1777.4.30~1855.2.23)是德国数学家,出生于德国布伦兹维克的一个贫苦家庭。
高斯的数学研究几乎遍及所有领域,在数论、代数学、非欧几何、复变函数和微分几何等方面都做出了开创性的贡献。
他还把数学应用于天文学、大地测量学和磁学的研究,发明了最小二乘法原理。
他和牛顿、阿基米德,被誉为有史以来的三大数学家,有“数学王子”之称。
高斯最出名的故事就是他十岁时,小学老师出了一道算术难题:
计算1+2+3+…+100=?
。
这可难为初学算术的学生,但是在天才的高斯看来这可是一道典型的水题。
老师刚讲完题目,他的答案也就出炉了。
今天咱们也来东施效颦一番,算一算1+2+3+…+n。
第一行有一个整数m,表示有m组测试数据。
接下来有m行,每一行有一个整数n(n≤10000)。
对于每一个n,输出一行,其值为1+2+3+…+n。
100
13
55
5050
91
{intk,a[60],i,j,sm=0;
{sm=0;
for(j=0;
=a[i];
sm=sm+j;
sm);
/*问题H:
子网掩码
13解决:
9
子网掩码计算方法
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。
就这么简单。
请看以下示例:
运算演示之一:
aa
IP地址 192.168.0.1
子网掩码 255.255.255.0
AND运算
转化为二进制进行运算:
IP地址 11010000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
11010000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
运算演示之二:
IP地址 192.168.0.254
IP地址 11010000.10101000.00000000.11111110
运算演示之三:
IP地址 192.168.0.4
IP地址 11010000.10101000.00000000.00000100
通过以上对三组计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。
均为192.168.0.0
所以计算机就会把这三台计算机视为是同一子网络。
第一行是本机IP地址
第二行是子网掩码
第三行整数N,表示后面有N个IP地址
第1个IP地址
......
第N个IP地址
计算并输出N个IP地址是否与本机在同一子网内。
对于在同一子网的输出"
INNER"
对于在不同子网的输出“OUTER”
192.168.0.1
255.255.255.0
192.168.0.2
192.168.0.254
192.168.1.2
intpanduan(intb[],intn[],intz[])
inty[4];
y[0]=b[0]&
n[0];
y[1]=b[1]&
n[1];
y[2]=b[2]&
n[2];
y[3]=b[3]&
n[3];
if(y[0]==z[0]&
y[1]==z[1]&
y[2]==z[2]&
y[3]==z[3])
return1;
else
return0;
inta[4],b[4],n[20][4],z[4];
charc[3];
intd,i;
%d%c%d%c%d%c%d"
a[0],&
c[0],&
a[1],&
c[1],&
a[2],&
c[2],&
a[3]);
b[0],&
b[1],&
b[2],&
b[3]);
z[0]=a[0]&
b[0];
z[1]=a[1]&
b[1];
z[2]=a[2]&
b[2];
z[3]=a[3]&
b[3];
//printf("
%d%d%d%d"
z[0],z[1],z[2],z[3]);
d);
d;
n[i][0],&
n[i][1],&
n[i][2],&
n[i][3]);
if(panduan(b,n[i],z))
printf("
INNER\n"
);
OUTER\n"
/*printf("
a[0],a[1],a[2],a[3]);
b[0],b[1],b[2],b[3]);