用户:已退坑查看:18 回复:8 评论:18 创建时间:2019-11-03T20:02:46
我刚刚编的《算24点》程序,这才是真正的编程!
C++代码如下:(Python代码正在编写)
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int a1[5];
char op[5];
bool isfinish=false;
int plus1(int a,int b){
if(a<b)return -1;
return a+b;
}
int minus1(int a,int b){
if(a<=b)return -1;
return a-b;
}
int multiply1(int a,int b){
if(a<b)return -1;
return a*b;
}
int divide1(int a,int b){
if(b==0||a%b)return -1;
return a/b;
}
int asdf(int a,int b,char o){
if(a==-1||b==-1)return -1;
else if(o=='+')return plus1(a,b);
else if(o=='-')return minus1(a,b);
else if(o=='*')return multiply1(a,b);
else if(o=='/')return divide1(a,b);
}
void print(int k){
isfinish=true;
int ans,ans2;
if(k==0){
cout<<a1[0]<<op[1]<<a1[1]<<'=';
ans=asdf(a1[0],a1[1],op[1]);
cout<<ans<<endl;
cout<<ans<<op[2]<<a1[2]<<'=';
ans=asdf(ans,a1[2],op[2]);
cout<<ans<<endl;
cout<<ans<<op[3]<<a1[3]<<'=';
ans=asdf(ans,a1[3],op[3]);
cout<<ans<<endl;
}
if(k==1){
cout<<a1[1]<<op[2]<<a1[2]<<'=';
ans=asdf(a1[1],a1[2],op[2]);
cout<<ans<<endl;
cout<<a1[0]<<op[1]<<ans<<'=';
ans=asdf(a1[0],ans,op[1]);
cout<<ans<<endl;
cout<<ans<<op[3]<<a1[3]<<'=';
ans=asdf(ans,a1[3],op[3]);
cout<<ans<<endl;
}
if(k==2){
cout<<a1[1]<<op[2]<<a1[2]<<'=';
ans=asdf(a1[1],a1[2],op[2]);
cout<<ans<<endl;
cout<<ans<<op[3]<<a1[3]<<'=';
ans=asdf(ans,a1[3],op[3]);
cout<<ans<<endl;
cout<<a1[0]<<op[1]<<ans<<'=';
ans=asdf(a1[0],ans,op[1]);
cout<<ans<<endl;
}
if(k==3){
cout<<a1[0]<<op[1]<<a1[1]<<'=';
ans=asdf(a1[0],a1[1],op[1]);
cout<<ans<<endl;
cout<<a1[2]<<op[3]<<a1[3]<<'=';
ans2=asdf(a1[2],a1[3],op[3]);
cout<<ans2<<endl;
cout<<ans<<op[2]<<ans2<<'=';
ans=asdf(ans,ans2,op[2]);
cout<<ans<<endl;
}
if(k==4){
cout<<a1[2]<<op[3]<<a1[3]<<'=';
ans=asdf(a1[2],a1[3],op[3]);
cout<<ans<<endl;
cout<<a1[1]<<op[2]<<ans<<'=';
ans=asdf(a1[1],ans,op[2]);
cout<<ans<<endl;
cout<<a1[0]<<op[1]<<ans<<'=';
ans=asdf(a1[0],ans,op[1]);
cout<<ans<<endl;
}
return;
}
void asdfasdf(int k){
int ans,ans2;
if(k==0){
ans=asdf(a1[0],a1[1],op[1]);
ans=asdf(ans,a1[2],op[2]);
ans=asdf(ans,a1[3],op[3]);
if(ans==24)print(k);
}
if(k==1){
ans=asdf(a1[1],a1[2],op[2]);
ans=asdf(a1[0],ans,op[1]);
ans=asdf(ans,a1[3],op[3]);
if(ans==24)print(k);
}
if(k==2){
ans=asdf(a1[1],a1[2],op[2]);
ans=asdf(ans,a1[3],op[3]);
ans=asdf(a1[0],ans,op[1]);
if(ans==24)print(k);
}
if(k==3){
ans=asdf(a1[0],a1[1],op[1]);
ans2=asdf(a1[2],a1[3],op[3]);
ans=asdf(ans,ans2,op[2]);
if(ans==24)print(k);
}
if(k==4){
ans=asdf(a1[2],a1[3],op[3]);
ans=asdf(a1[1],ans,op[2]);
ans=asdf(a1[0],ans,op[1]);
if(ans==24)print(k);
}
return;
}
void lined2(int sum){
if(sum==4){
for(int kk=0;kk<5;kk++){
asdfasdf(kk);
if(isfinish)return;
}
}
else{
op[sum]='+';
lined2(sum+1);
if(isfinish)return;
op[sum]='-';
lined2(sum+1);
if(isfinish)return;
op[sum]='*';
lined2(sum+1);
if(isfinish)return;
op[sum]='/';
lined2(sum+1);
if(isfinish)return;
op[sum]=' ';
}
}
void lined1(){
do{
lined2(1);
if(isfinish)return;
}while(next_permutation(a1,a1+4));
}
int main(){
for(int i=0;i<4;i++)cin>>a1[i];
sort(a1,a1+4);
lined1();
if(isfinish==false)cout<<"No answer!";
return 0;
}
星空辰光#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int a1[5];
char op[5];
bool isfinish=false;
int plus1(int a,int b){
if(a<b)return -1;
return a+b;
}
int minus1(int a,int b){
if(a<=b)return -1;
return a-b;
}
int multiply1(int a,int b){
if(a<b)return -1;
return a*b;
}
int divide1(int a,int b){
if(b==0||a%b)return -1;
return a/b;
}
int asdf(int a,int b,char o){
if(a==-1||b==-1)return -1;
else if(o=='+')return plus1(a,b);
else if(o=='-')return minus1(a,b);
else if(o=='*')return multiply1(a,b);
else if(o=='/')return divide1(a,b);
}
void print(int k){
isfinish=true;
int ans,ans2;
if(k==0){
cout<<a1[0]<<op[1]<<a1[1]<<'=';
ans=asdf(a1[0],a1[1],op[1]);
cout<<ans<<endl;
cout<<ans<<op[2]<<a1[2]<<'=';
ans=asdf(ans,a1[2],op[2]);
cout<<ans<<endl;
cout<<ans<<op[3]<<a1[3]<<'=';
ans=asdf(ans,a1[3],op[3]);
cout<<ans<<endl;
}
if(k==1){
cout<<a1[1]<<op[2]<<a1[2]<<'=';
ans=asdf(a1[1],a1[2],op[2]);
cout<<ans<<endl;
cout<<a1[0]<<op[1]<<ans<<'=';
ans=asdf(a1[0],ans,op[1]);
cout<<ans<<endl;
cout<<ans<<op[3]<<a1[3]<<'=';
ans=asdf(ans,a1[3],op[3]);
cout<<ans<<endl;
}
if(k==2){
cout<<a1[1]<<op[2]<<a1[2]<<'=';
ans=asdf(a1[1],a1[2],op[2]);
cout<<ans<<endl;
cout<<ans<<op[3]<<a1[3]<<'=';
ans=asdf(ans,a1[3],op[3]);
cout<<ans<<endl;
cout<<a1[0]<<op[1]<<ans<<'=';
ans=asdf(a1[0],ans,op[1]);
cout<<ans<<endl;
}
if(k==3){
cout<<a1[0]<<op[1]<<a1[1]<<'=';
ans=asdf(a1[0],a1[1],op[1]);
cout<<ans<<endl;
cout<<a1[2]<<op[3]<<a1[3]<<'=';
ans2=asdf(a1[2],a1[3],op[3]);
cout<<ans2<<endl;
cout<<ans<<op[2]<<ans2<<'=';
ans=asdf(ans,ans2,op[2]);
cout<<ans<<endl;
}
if(k==4){
cout<<a1[2]<<op[3]<<a1[3]<<'=';
ans=asdf(a1[2],a1[3],op[3]);
cout<<ans<<endl;
cout<<a1[1]<<op[2]<<ans<<'=';
ans=asdf(a1[1],ans,op[2]);
cout<<ans<<endl;
cout<<a1[0]<<op[1]<<ans<<'=';
ans=asdf(a1[0],ans,op[1]);
cout<<ans<<endl;
}
return;
}
void asdfasdf(int k){
int ans,ans2;
if(k==0){
ans=asdf(a1[0],a1[1],op[1]);
ans=asdf(ans,a1[2],op[2]);
ans=asdf(ans,a1[3],op[3]);
if(ans==24)print(k);
}
if(k==1){
ans=asdf(a1[1],a1[2],op[2]);
ans=asdf(a1[0],ans,op[1]);
ans=asdf(ans,a1[3],op[3]);
if(ans==24)print(k);
}
if(k==2){
ans=asdf(a1[1],a1[2],op[2]);
ans=asdf(ans,a1[3],op[3]);
ans=asdf(a1[0],ans,op[1]);
if(ans==24)print(k);
}
if(k==3){
ans=asdf(a1[0],a1[1],op[1]);
ans2=asdf(a1[2],a1[3],op[3]);
ans=asdf(ans,ans2,op[2]);
if(ans==24)print(k);
}
if(k==4){
ans=asdf(a1[2],a1[3],op[3]);
ans=asdf(a1[1],ans,op[2]);
ans=asdf(a1[0],ans,op[1]);
if(ans==24)print(k);
}
return;
}
void lined2(int sum){
if(sum==4){
for(int kk=0;kk<5;kk++){
asdfasdf(kk);
if(isfinish)return;
}
}
else{
op[sum]='+';
lined2(sum+1);
if(isfinish)return;
op[sum]='-';
lined2(sum+1);
if(isfinish)return;
op[sum]='*';
lined2(sum+1);
if(isfinish)return;
op[sum]='/';
lined2(sum+1);
if(isfinish)return;
op[sum]=' ';
}
}
void lined1(){
do{
lined2(1);
if(isfinish)return;
}while(next_permutation(a1,a1+4));
}
int main(){
for(int i=0;i<4;i++)cin>>a1[i];
sort(a1,a1+4);
lined1();
if(isfinish==false)cout<<"No answer!";
return 0;
}点赞0
评论
爱探险的可乐呀Python代码在这里~我已经编好了
#二十四点
import os
import time
from time import sleep
from time import perf_counter
global Goal,MaxAllowRetryNum,Count
Goal,MaxAllowRetryNum,Count=24,3,0
#输出程序相关信息
def ptintInfo():
print('''" 经典 24 点 "''')
print(" 请用户输入四个正整数值 ")
print(" 单个数值提供三试错机会。若机会用完,程序倒计时5秒退出 ")
print(" 将输出所有的24点方案,并对方案进行计数 ")
print(" 若无方案,程序退出,输出0 ")
def printSatistics(times):
print("一共有{}种方案".format(Count))
#得到四个用户输入值
def getNumbers():
a=getOneNumber("一")
b=getOneNumber("二")
c=getOneNumber("三")
d=getOneNumber("四")
print("输入的数值为:"+a+','+b+','+c+','+d)
return a+' '+b+' '+c+' '+d
#得到单个用户输入值
#单个提供三次试错机会,(不包括第一次输入)
#试错机会用完后,程序倒计时五秒强制退出
def getOneNumber(temp):
global MaxAllowRetryNum
for tryies in range(MaxAllowRetryNum+1):
num=input("请输入第{}个值:".format(temp))
try:
num=int(eval(num))
if num > 0:
break
else:
print("请核对输入信息,还剩余{}次机会".format(MaxAllowRetryNum-tryies))
except:
print("请核对输入信息,还剩余{}次机会".format(MaxAllowRetryNum-tryies))
if tryies == MaxAllowRetryNum:
for i in range(5):
print("\r所有次数已用完,程序将在{}秒后退出".format(5-i))
sleep(1)
print("\n")
os._exit(0)
return str(num)
#穷举所有的数值列表
#共4!=24种
def getNumList(numbers):
items=numbers.split()
#四重循环遍历穷举所有的数值组合
#data_list = []
# for i in range(4):
# for j in range(4):
# if i!=j:
# for p in range(4):
# if p!=i and p!=j:
# for q in range(4):
# if q!=i and q!=j and q!=p:
# data_list.append(items[i]+' '+items[j]+' '+items[p]+' '+items[q])
data_list = [(items[i]+' '+items[j]+' '+items[p]+' '+items[q]) for i in range(4) for j in range(4) for p in range(4) for q in range(4) if (i != j) &(i != p) &(i != q) &(j != p) &(j != q) &(p != q)]
#使用set方法排除冗余的数字组合
#当输入的数字中存在重复数字,则4!=24种排序方案会存在重复,必须排除
return set(data_list)
#穷举所有的操作符列表
#共4x4x4=喵种
def getOplist(ops):
# op_list_orgin=ops
# op_list=[]
#三重循环遍历穷举
# for i in range(4):
# for j in range(4):
# for p in range(4):
# item=str(op_list_orgin[i])+' '+str(op_list_orgin[j])+' '+str(op_list_orgin[p])
# op_list.append(item)
op_list=[ops[i]+' '+ops[j]+' '+ops[p] for i in range(4) for j in range(4) for p in range(4)]
return op_list
#计算24点
def Cal(num_list,opt_list):
for numlist in num_list:
nums=numlist.split()
for oplist in opt_list:
ops=oplist.split()
Cal24(nums,ops)
#对单种运算符顺序和单种数字顺序进行组合运算
def Cal24(nums,op):
global Goal,Count
#第一种情况 ((num0 op0 num1)op1 num2)op2 num3
try:
if round(eval("(("+nums[0]+op[0]+nums[1]+")"+op[1]+nums[2]+")"+op[2]+nums[3]),0) == Goal:
Count+=1
print("(({}{}{}){}{}){}{}={}".format(\
nums[0], op[0], nums[1], op[1], nums[2], op[2], nums[3], Goal))
except:
pass
#第二种情况 (num0 op0 num1) op1 (num2 op2 num3)
try:
if round(eval("("+nums[0]+op[0]+nums[1]+")"+op[1]+"("+nums[2]+op[2]+nums[3]+")"), 0) == Goal:
Count += 1
print("({}{}{}){}({}{}{})={}".format(\
nums[0], op[0], nums[1], op[1], nums[2], op[2], nums[3], Goal))
except:
pass
#第三种情况 ( num0 op0 ( num1 op1 num2 )) op2 num3
try:
if round(eval("("+nums[0]+op[0]+"("+nums[1]+op[1]+nums[2]+"))"+op[2]+nums[3]), 0) == Goal:
Count += 1
print("({}{}({}{}{})){}{}={}".format(\
nums[0], op[0], nums[1], op[1], nums[2], op[2], nums[3], Goal))
except:
pass
#第四种情况 num0 op0 (( num1 op1 num2 ) op2 num3 )
try:
if round(eval(nums[0]+op[0]+"(("+nums[1]+op[1]+nums[2]+")"+op[2]+nums[3]+")"), 0) == Goal:
Count += 1
print("{}{}(({}{}{}){}{})={}".format(\
nums[0], op[0], nums[1], op[1], nums[2], op[2], nums[3], Goal))
except:
pass
#第五种情况 num0 op0 ( num1 op1 ( num2 op2 num3 ))
try:
if round(eval(nums[0]+op[0]+"("+nums[1]+op[1]+"("+nums[2]+op[2]+nums[3]+"))"), 0) == Goal:
Count += 1
print("{}{}({}{}({}{}{}))={}".format(\
nums[0], op[0], nums[1], op[1], nums[2], op[2], nums[3], Goal))
except:
pass
if __name__ == '__main__':
ptintInfo()
numbers=getNumbers()
start=perf_counter()
num_list=getNumList(numbers)
opt_list=getOplist('+-*/')
Cal(num_list,opt_list)
printSatistics(perf_counter()-start)点赞0
评论