第二届软件大赛答案.docx
- 文档编号:24243583
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:18
- 大小:76KB
第二届软件大赛答案.docx
《第二届软件大赛答案.docx》由会员分享,可在线阅读,更多相关《第二届软件大赛答案.docx(18页珍藏版)》请在冰豆网上搜索。
第二届软件大赛答案
第一道大题
下列乘法算式中:
每个汉字代表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;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 软件 大赛 答案