一个算24点的程序Word下载.docx
- 文档编号:22021236
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:15
- 大小:17.47KB
一个算24点的程序Word下载.docx
《一个算24点的程序Word下载.docx》由会员分享,可在线阅读,更多相关《一个算24点的程序Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
inti,j,k,ll,q,r,ss,tt,n=0;
charf[4]={'
+'
'
-'
*'
/'
};
floatx[4];
chary[3];
intgo=1;
while(go==1){
printf("
系统随机数字:
\n"
);
srand(time(0));
for(i=0;
i<
4;
i++)
{a[i]=(float)(rand()%13+1);
printf("
%.0f,"
a[i]);
}
houzui();
if(flagg==1)
{//scanf("
%c"
&
temp);
printf("
\n******Resualt:
******\n"
/*get4num*/
total=0;
for(i=0;
i<
4;
i++){
for(j=0;
j<
j++){
if(i==j)continue;
for(k=0;
k<
k++){
if(k==i||k==j)continue;
for(ll=0;
ll<
ll++){
if(ll==i||ll==j||ll==k)continue;
x[0]=a[i];
x[1]=a[j];
x[2]=a[k];
x[3]=a[ll];
/*get+-*/
for(q=0;
q<
q++){
y[0]=f[q];
for(r=0;
r<
r++){
y[1]=f[r];
for(ss=0;
ss<
ss++){
y[2]=f[ss];
/*start*/
test24(x,y);
}
n++;
if(total==0)
此题无解,恭喜您回答正确!
else
{
total=%d\n此题有解,Sorry,回答错误\n"
total);
}
******end******\n"
继续玩吗?
继续请按1,退出请按2\n"
scanf("
%d"
go);
getchar();
elseif(flagg==2)
输入不合法,返回重新开始!
"
go=1;
{
if((int)ssum==24)
%S=%.0f,恭喜您,回答正确!
input,ssum);
%s=%.0f,答案错误!
scanf("
getchar();
Bye!
return0;
}
voidhouzui(void)
{
inti;
//clrscr();
Initialize();
printf("
请输入计算表达式:
(若不能则输入?
)\n"
);
gets(input);
flagg=0;
if(!
strcmp(input,"
?
)||!
?
))
flagg=1;
return;
if(checkk())
flagg=2;
return;
ssum=0.0;
SetExpression(input);
ConvertToPostfix();
calculate();
}
voidcalculate(void)
floattempp[MAX];
inti,lenn,count,kk,u,j,v;
lenn=strlen(output);
count=0;
kk=0;
lenn;
if(output[i]=='
)
tempp[kk++]=60001;
elseif(output[i]=='
tempp[kk++]=60002;
tempp[kk++]=60003;
tempp[kk++]=60004;
elseif(output[i]<
='
9'
&
&
output[i]>
0'
if(output[i]-'
==(int)bb[count])
{
tempp[kk++]=output[i]-'
;
count++;
}
else
tempp[kk++]=(output[i]-'
)*10+output[i+1]-'
i++;
}
for(i=0;
i<
kk;
i++)
if(tempp[i]>
60000)
u=tempp[i-1];
j=i-2;
tempp[i-1]=60010;
while(j>
=0)
if(tempp[j]<
=60000)
{
v=tempp[j];
tempp[j]=60010;
break;
}
j--;
if(tempp[i]==60001)
u=u+v;
elseif(tempp[i]==60002)
u=v-u;
elseif(tempp[i]==60003)
u=u*v;
elseif(tempp[i]==60004)
u=v/u;
tempp[i]=u;
ssum=u;
intcheckk(void)
inti,j,start=0,kk,lenn,ff,ttt=0;
floattemp,tempp=0;
start=0;
lenn=strlen(input);
for(i=0;
lenn;
if((input[i]>
'
||input[i]<
)&
input[i]!
('
='
)'
input[i]!
return1;
if(input[i]=='
||input[i]=='
)
if(input[i-1]=='
||input[i-1]=='
||input[i+1]=='
||input[i+1]=='
return1;
)
tempp++;
elseif(input[i]=='
tempp--;
if(input[i]=='
i>
0)
if((input[i-1]>
input[i-1]<
)||input[i-1]=='
return1;
lenn-1)
if((input[i+1]>
input[i+1]<
)||input[i+1]=='
if(tempp!
4;
while(input[start]>
||input[start]<
start++;
j=start;
while(input[j]<
input[j]>
j<
lenn)
j++;
ff=0;
if((j-start)==1)
temp=(float)(input[start]-'
bb[ttt++]=temp;
for(kk=0;
kk<
kk++)
if(temp==a[kk])
ff=1;
elseif((j-start)==2)
temp=(float)((input[start]-'
)*10+input[start+1]-'
}
if(ff==0)
start=j;
voidInitialize(void)
top=-1;
/*Makestackempty*/
strcpy(output,"
strcpy(stack,"
l=0;
voidSetExpression(char*str)
s=str;
l=strlen(s);
*(output+l)='
\0'
;
t=output;
/*addsoperatortothestack*/
voidPushOnStack(charc)
if(top==MAX-1)
printf("
\n栈空间满了!
.\n"
else
top++;
stack[top]=c;
/*popsanoperatorfromthestack*/
charPopFromStack(void)
if(top==-1)/*Stackisempty*/
return-1;
charitem=stack[top];
top--;
returnitem;
/*returnsthepriotityoftheoperator*/
intpriority(charc)
if(c=='
^'
)return3;
/*Exponentialoperator*/
||c=='
%'
)return2;
elseif(c=='
)return1;
elsereturn0;
/*convertstheinfixexpr.topostfixform*/
voidConvertToPostfix(void)
charopr;
while(*(s))
{/*Skipwhitespaces,ifany*/
if(*(s)=='
||*(s)=='
\t'
s++;
continue;
if(isdigit(*(s))||isalpha(*(
s)))/*Operands*/
while(isdigit(*(s))||isalpha(*
(s)))
*(t)=*(s);
t++;
)/*OpeningParenthesis*/
PushOnStack(*(s));
||*(s)
=='
if(top!
=-1)
opr=PopFromStack();
while(priority(opr)>
=
priority(*(s)))
*(t)=opr;
opr=
PopFromStack();
PushOnStack(opr);
elsePushOnStack(*(s));
)/*ClosingParenthesis*/
while(opr!
while(top!
=-1)/*Whilestackisnotempty*/
floatsum(floatxx,floatyy,charmm){
switch(mm){
case'
:
return(xx+yy);
break;
return(xx-yy);
return(xx*yy);
if(yy!
=0){
return(xx/yy);
else{
voidtest24(floatx[],charm[]){
intii;
floatss[5];
ss[0]=sum(sum(sum(x[0],x[1],m[0]),x[2],m[1]),x[3],m[2]);
ss[1]=sum(sum(x[0],sum(x[1],x[2],m[1]),m[0]),x[3],m[2]);
ss[2]=sum(x[0],sum(sum(x[1],x[2],m[1]),x[3],m[2]),m[0]);
ss[3]=sum(x[0],sum(x[1],sum(x[2],x[3],m[2]),m[1]),m[0]);
ss[4]=sum(sum(x[0],x[1],m[0]),sum(x[2],x[3],m[2]),m[1]);
for(ii=0;
ii<
5;
ii++){
if(fabs(ss[ii]-24.0)<
0.1){
if(ii==0)
((%1.0f%c%1.0f)%c%1.0f)%c%1.0f=24\n"
x[0],m[0],x[1],m[1],x[2],m[2],x[3]);
elseif(ii==1)
(%1.0f%c(%1.0f%c%1.0f))%c%1.0f=24\n"
elseif(ii==2)
%1.0f%c((%1.0f%c%1.0f)%c%1.0f)=24\n"
elseif(ii==3)
%1.0f%c(%1.0f%c(%1.0f%c%1.0f))=24\n"
elseif(ii==4)
(%1.0f%c%1.0f)%c(%1.0f%c%1.0f)=24\n"
total++;
//count++;
/*20perbreak*/
//if(count>
=page){
//printf("
pressENTERcontinue\n"
//scanf("
//count=0;
//}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一个 24 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)