算法笔试Word文档下载推荐.docx
《算法笔试Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《算法笔试Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
2、求高于平均分的学生学号及成绩(学号和成绩人工输入)
doublefind(inttotal,intn)
intnumber,score,average;
scanf("
&
number);
if(number!
=0){
score);
average=find(total+score,n+1);
if(score>
=average)
%d\n"
number,score);
returnaverage;
}else{
Average=%d\n"
total/n);
returntotal/n;
}
find(0,0);
3、递归实现回文判断(如:
abcdedbca就是回文)
intfind(char*str,intn)
if(n<
=1)return1;
elseif(str[0]==str[n-1])returnfind(str+1,n-2);
elsereturn0;
char*str="
abcdedcba"
;
%s:
%s\n"
str,find(str,
strlen(str))?
"
Yes"
:
No"
);
4、组合问题(从M个不同字符中任取N个字符的所有组合)
voidfind(char*source,char*result,intn)
if(n==1){
while(*source)
%s%c\n"
result,*source++);
inti,j;
for(i=0;
source[i]!
=0;
i++);
for(j=0;
result[j]!
j++);
for(;
i>
=n;
i--)
{
result[j]=*source++;
result[j+1]='
\0'
find(source,result,n-1);
intconstn=3;
char*source="
ABCDE"
result[n+1]={0};
0&
&
strlen(source)>
n<
=strlen(source))
find(source,result,3);
5、分解成质因数(如435234=251*17*17*3*2)
voidprim(intm,intn)
if(m>
n){
while(m%n!
=0)n++;
m/=n;
prim(m,n);
%d*"
intn=435234;
%d="
prim(n,2);
6、寻找迷宫的一条出路(o:
通路;
X障碍)
#defineMAX_SIZE8
intH[4]={0,1,0,-1};
intV[4]={-1,0,1,0};
charMaze[MAX_SIZE][MAX_SIZE]={{'
X'
'
},
{'
o'
{'
}};
voidFindPath(intX,intY)
if(X==MAX_SIZE||Y==MAX_SIZE){
for(inti=0;
i<
MAX_SIZE;
for(intj=0;
j<
j++)
%c%c"
Maze[i][j],j<
MAX_SIZE-1?
'
\n'
}elsefor(intk=0;
k<
4;
k++)
if(X>
=0&
Y>
Y<
MAX_SIZE&
X<
==Maze[X][Y]){
Maze[X][Y]='
FindPath(X+V[k],Y+H[k]);
Maze[X][Y]='
FindPath(1,0);
7、随机分配座位,共50个学生,使学号相邻的同学座位不能相邻(早些时候用C#写的,没有用C改写)。
staticvoidMain(string[]args)
intTmp=0,Count=50;
int[]Seats=newint[Count];
bool[]Students=newbool[Count];
System.RandomRandStudent=newSystem.Random();
Students[Seats[0]=RandStudent.Next(0,Count)]=true;
for(inti=1;
Count;
)
Tmp=(int)RandStudent.Next(0,Count);
if((!
Students[Tmp])&
(Seats[i-1]-Tmp!
=1)&
(Seats[i-1]-Tmp)!
=-1){
Seats[i++]=Tmp;
Students[Tmp]=true;
foreach(intStudentinSeats)
System.Console.Write(Student+"
System.Console.Read();
8、求网格中的黑点分布(有6*7的网格,在某些格子中有黑点,已知各行与各列中有黑点的点数之和)
#defineROWS6
#defineCOLS7
intiPointsR[ROWS]={2,0,4,3,4,0};
//各行黑点数和的情况
intiPointsC[COLS]={4,1,2,2,1,2,1};
//各列黑点数和的情况
intiCount,iFound;
intiSumR[ROWS],iSumC[COLS],Grid[ROWS][COLS];
intSet(intiRowNo)
if(iRowNo==ROWS){
for(intiColNo=0;
iColNo<
COLS&
iSumC[iColNo]==iPointsC[iColNo];
iColNo++)
if(iColNo==COLS-1){
\nNo.%d:
\n"
++iCount);
ROWS;
for(intj=0;
COLS;
%d%c"
Grid[i][j],(j+1)%COLS?
iFound=1;
//iFound=1,有解
iColNo++)
if(iPointsR[iRowNo]==0){
Set(iRowNo+1);
}elseif(Grid[iRowNo][iColNo]==0){
Grid[iRowNo][iColNo]=1;
iSumR[iRowNo]++;
iSumC[iColNo]++;
if(iSumR[iRowNo]<
iPointsR[iRowNo]&
iSumC[iColNo]<
=iPointsC[iColNo])
Set(iRowNo);
elseif(iSumR[iRowNo]==iPointsR[iRowNo]&
iRowNo<
ROWS)
Grid[iRowNo][iColNo]=0;
iSumR[iRowNo]--;
iSumC[iColNo]--;
returniFound;
//用于判断是否有解
if(!
Set(0))
Failure!
9、有4种面值(面值为1,4,12,21)的邮票很多枚,从中最多任取5张进行组合,求邮票最大连续组合值
#defineN5
#defineM5
intk,Found,Flag[N];
intStamp[M]={0,1,4,12,21};
//在剩余张数n中组合出面值和Value
intCombine(intn,intValue)
if(n>
Value==0){
Found=1;
intSum=0;
N&
Flag[i]!
i++){
Sum+=Stamp[Flag[i]];
%d"
Stamp[Flag[i]]);
\tSum=%d\n\n"
Sum);
}elsefor(inti=1;
M&
!
Found&
n>
0;
if(Value-Stamp[i]>
Flag[k++]=i;