第二届软件大赛答案.docx

上传人:b****1 文档编号:10397861 上传时间:2023-05-25 格式:DOCX 页数:18 大小:76KB
下载 相关 举报
第二届软件大赛答案.docx_第1页
第1页 / 共18页
第二届软件大赛答案.docx_第2页
第2页 / 共18页
第二届软件大赛答案.docx_第3页
第3页 / 共18页
第二届软件大赛答案.docx_第4页
第4页 / 共18页
第二届软件大赛答案.docx_第5页
第5页 / 共18页
第二届软件大赛答案.docx_第6页
第6页 / 共18页
第二届软件大赛答案.docx_第7页
第7页 / 共18页
第二届软件大赛答案.docx_第8页
第8页 / 共18页
第二届软件大赛答案.docx_第9页
第9页 / 共18页
第二届软件大赛答案.docx_第10页
第10页 / 共18页
第二届软件大赛答案.docx_第11页
第11页 / 共18页
第二届软件大赛答案.docx_第12页
第12页 / 共18页
第二届软件大赛答案.docx_第13页
第13页 / 共18页
第二届软件大赛答案.docx_第14页
第14页 / 共18页
第二届软件大赛答案.docx_第15页
第15页 / 共18页
第二届软件大赛答案.docx_第16页
第16页 / 共18页
第二届软件大赛答案.docx_第17页
第17页 / 共18页
第二届软件大赛答案.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第二届软件大赛答案.docx

《第二届软件大赛答案.docx》由会员分享,可在线阅读,更多相关《第二届软件大赛答案.docx(18页珍藏版)》请在冰点文库上搜索。

第二届软件大赛答案.docx

第二届软件大赛答案

第一道大题

下列乘法算式中:

每个汉字代表1个数字(1~9)。

相同的汉字代表相同的数字,不同的汉字代表不同的数字。

第2/2页赛软件*比赛=软件比拼

试编程确定使得整个算式成立的数字组合。

#include"stdio.h"

#include"stdlib.h"

boolunequal(inta1,inta2,inta3,intb1)

{

inta[4];

a[0]=a1;

a[1]=a2;

a[2]=a3;

a[3]=b1;

inti,j;

for(i=0;i<4;i++)

for(j=i+1;j<4;j++)

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

returnfalse;

returntrue;

}

boolcal(inta,intb)

{

inta1,a2,a3,b1,b2;

a1=a/100;

a2=(a-a1*100)/10;

a3=a%10;

b1=b/10;

b2=b%10;

if((a1==b2)&&unequal(a1,a2,a3,b1))

{

returntrue;

}

returnfalse;

}

booldif(intc4,inta1,inta2,inta3,intb1)

{

inta[4];

a[0]=a1;

a[1]=a2;

a[2]=a3;

a[3]=b1;

for(inti=0;i<4;i++)

if(c4==a[i])returnfalse;

returntrue;

}

boolcal1(inta,intb,intc)

{

inta1,a2,a3,b1,b2,c1,c2,c3,c4;

a1=a/100;

a2=(a-a1*100)/10;

a3=a%10;

b1=b/10;

b2=b%10;

c1=c/1000;

c2=(c-c1*1000)/100;

c3=(c-c1*1000-c2*100)/10;

c4=c%10;

if((c1==a2)&&(c2==a3)&&(c3==b1)&&dif(c4,a1,a2,a3,b1))

returntrue;

returnfalse;

}

intmain()

{

intFirstNum,SecondNum,Result;

for(FirstNum=111;FirstNum<=999;FirstNum++)

for(SecondNum=11;SecondNum<=99;SecondNum++)

{

if(cal(FirstNum,SecondNum))

{

Result=FirstNum*SecondNum;

if(Result>=1111&&Result<=9999)

if(cal1(FirstNum,SecondNum,Result))

printf("\n%d*%d=%d\n",FirstNum,SecondNum,Result);

}

}

system("pause");

return0;

}

第二道大题

计算24是流行的扑克游戏。

其方法是任意取出4张牌,AJQK王牌算1,其它牌按点数计算,花色不计。

目标是通过加、减、乘、除和括号最终算出24。

设计一个程序,输入4个数字(1~10),则列出所有可能计算结果为24的方案。

要求:

方案不能重复(加法乘法交换律等算不同方案)。

计算中局部可以为分数,结果为整数即可(如3377算法:

(3+3/7)*7)

如果没有找到方案输出:

无解。

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#defineMAXSIZE100

intflag=0;

charptr[7]={'+','-','*','/','(',')','#'};

chartable[7][7]=

{

{'>','>','<','<','<','>','>'},

{'>','>','<','<','<','>','>'},

{'>','>','>','>','<','>','>'},

{'>','>','>','>','<','>','>'},

{'<','<','<','<','<','=',''},

{'>','>','>','>','','>','>'},

{'<','<','<','<','<','','='}

};

intLocateVex(chara)

{

for(inti=0;i<7;i++)

if(ptr[i]==a)

returni;

}

typedefstructOpndStack

{

intdata[MAXSIZE];

inttop;

}OpndStack;

typedefstructOptrStack

{

chardata[MAXSIZE];

inttop;

}OptrStack;

OpndStackopnd;

OptrStackoptr;

voidInitOpndStack()

{

opnd.top=-1;

}

voidInitOptrStack()

{

optr.top=-1;

}

voidDisposeStr(charstr[])

{

intlen;

len=strlen(str);

str[len]='#';

str[len+1]='\0';

}

voidPushOpndStack(inta)

{

opnd.data[++opnd.top]=a;

}

voidPushOptrStack(charc)

{

optr.data[++optr.top]=c;

}

intPopOpndStack()

{

returnopnd.data[opnd.top--];

}

charPopOptrStack()

{

returnoptr.data[optr.top--];

}

charGetTopOptr()

{

returnoptr.data[optr.top];

}

intGetTopOpnd()

{

returnopnd.data[opnd.top];

}

boolisOpnd(charc)

{

if(c>='0'&&c<='9')

returntrue;

returnfalse;

}

charPrecede(chara,charc)

{

inti=LocateVex(a);

intj=LocateVex(c);

returntable[i][j];

}

intcal(inta,charop,intb)

{

if(b==0&&op=='/'){flag=1;return-1;}

switch(op)

{

case'+':

returna+b;break;

case'-':

returna-b;break;

case'*':

returna*b;break;

case'/':

returna/b;break;

default:

break;

}

}

voidfunc(charMstr[80])

{

charstr[80];

intlen;

charop;

intnum1;

intnum2;

intresult;

inti,j,k;

charc;

//printf("\n请输入要求值的表达式\n");

//gets(str);

strcpy(str,Mstr);

DisposeStr(str);

len=strlen(str);

//printf("%d",len);

InitOpndStack();

InitOptrStack();

PushOptrStack('#');

i=0;

c=str[i++];

while(c!

='#'||GetTopOptr()!

='#')

{

if(isOpnd(c)){PushOpndStack(c-'0');c=str[i++];}

else

switch(Precede(GetTopOptr(),c))

{

case'<':

PushOptrStack(c);c=str[i++];break;

case'=':

PopOptrStack();c=str[i++];break;

case'>':

op=PopOptrStack();

num2=PopOpndStack();

num1=PopOpndStack();

result=cal(num1,op,num2);

if(flag==0)

PushOpndStack(result);

break;

default:

break;

}

if(flag==1)break;

}

if(flag==1)

{flag=0;return;}

else

{

inttotal=GetTopOpnd();

if(total==24)

printf("\n%s结果是%d\n",Mstr,total);

}

}

charconverse(inti)

{

switch(i-1)

{

case0:

return'+';break;

case1:

return'-';break;

case2:

return'*';break;

case3:

return'/';break;

default:

break;

}

}

intmain()

{

chartemp[80];

inti=0;

intdigit[4];

intop[3];

intk;

for(digit[0]=1;digit[0]<=9;digit[0]++)

for(digit[1]=1;digit[1]<=9;digit[1]++)

for(digit[2]=1;digit[2]<=9;digit[2]++)

for(digit[3]=1;digit[3]<=9;digit[3]++)

for(op[0]=1;op[0]<=4;op[0]++)

for(op[1]=1;op[1]<=4;op[1]++)

for(op[2]=1;op[2]<=4;op[2]++)

{

for(k=0;k<10;k++)

if(k==0)

{

temp[0]=digit[0]+'0';

temp[1]=converse(op[0]);

temp[2]=digit[1]+'0';

temp[3]=converse(op[1]);

temp[4]=digit[2]+'0';

temp[5]=converse(op[2]);

temp[6]=digit[3]+'0';

temp[7]='\0';

func(temp);

}

elseif(k==1)

{

temp[0]='(';

temp[1]=digit[0]+'0';

temp[2]=converse(op[0]);

temp[3]=digit[1]+'0';

temp[4]=')';

temp[5]=converse(op[1]);

temp[6]=digit[2]+'0';

temp[7]=converse(op[2]);

temp[8]=digit[3]+'0';

temp[9]='\0';

func(temp);

}

elseif(k==2)

{

temp[0]=digit[0]+'0';

temp[1]=converse(op[0]);

temp[2]='(';

temp[3]=digit[1]+'0';

temp[4]=converse(op[1]);

temp[5]=digit[2]+'0';

temp[6]=')';

temp[7]=converse(op[2]);

temp[8]=digit[3]+'0';

temp[9]='\0';

func(temp);

}

elseif(k==3)

{

temp[0]=digit[0]+'0';

temp[1]=converse(op[0]);

temp[2]=digit[1]+'0';

temp[3]=converse(op[1]);

temp[4]='(';

temp[5]=digit[2]+'0';

temp[6]=converse(op[2]);

temp[7]=digit[3]+'0';

temp[8]=')';

temp[9]='\0';

func(temp);

}

elseif(k==4)

{

temp[0]='(';

temp[1]=digit[0]+'0';

temp[2]=converse(op[0]);

temp[3]=digit[1]+'0';

temp[4]=converse(op[1]);

temp[5]=digit[2]+'0';

temp[6]=')';

temp[7]=converse(op[2]);

temp[8]=digit[3]+'0';

temp[9]='\0';

func(temp);

}

elseif(k==5)

{

temp[0]=digit[0]+'0';

temp[1]=converse(op[0]);

temp[2]='(';

temp[3]=digit[1]+'0';

temp[4]=converse(op[1]);

temp[5]=digit[2]+'0';

temp[6]=converse(op[2]);

temp[7]=digit[3]+'0';

temp[8]=')';

temp[9]='\0';

func(temp);

}

elseif(k==6)

{

temp[0]='(';

temp[1]='(';

temp[2]=digit[0]+'0';

temp[3]=converse(op[0]);

temp[4]=digit[1]+'0';

temp[5]=')';

temp[6]=converse(op[1]);

temp[7]=digit[2]+'0';

temp[8]=')';

temp[9]=converse(op[2]);

temp[10]=digit[3]+'0';

temp[11]='\0';

func(temp);

}

elseif(k==7)

{

temp[0]='(';

temp[1]=digit[0]+'0';

temp[2]=converse(op[0]);

temp[3]='(';

temp[4]=digit[1]+'0';

temp[5]=converse(op[1]);

temp[6]=digit[2]+'0';

temp[7]=')';

temp[8]=')';

temp[9]=converse(op[2]);

temp[10]=digit[3]+'0';

temp[11]='\0';

func(temp);

}

elseif(k==8)

{

temp[0]=digit[0]+'0';

temp[1]=converse(op[0]);

temp[2]='(';

temp[3]='(';

temp[4]=digit[1]+'0';

temp[5]=converse(op[1]);

temp[6]=digit[2]+'0';

temp[7]=')';

temp[8]=converse(op[2]);

temp[9]=digit[3]+'0';

temp[10]=')';

temp[11]='\0';

func(temp);

}

elseif(k==9)

{

temp[0]=digit[0]+'0';

temp[1]=converse(op[0]);

temp[2]='(';

temp[3]=digit[1]+'0';

temp[4]=converse(op[1]);

temp[5]='(';

temp[6]=digit[2]+'0';

temp[7]=converse(op[2]);

temp[8]=digit[3]+'0';

temp[9]=')';

temp[10]=')';

temp[11]='\0';

func(temp);

}

else

{

}

}

system("pause");

return0;

}

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

当前位置:首页 > 经管营销 > 经济市场

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

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