📄 24_point.cpp
字号:
// 24_point.cpp : Defines the entry point for the console application.
//-------------------------------------------------------------------------------------------
#include "stdafx.h" //定義控制台程序的頭文件
#include "stdlib.h"
#include <iostream>
#include <string>
using namespace std; //聲明類庫文件
//-----------------------------------------------------------------------------------------------
int four[4],three[3],two,g; //定義用於保存數據的變量
void count(int s[],int i,int j ); //聲明以下自定義的三個函數
void com(int i,int j,int p,int q,int m,int n,int num,int b[]);
//int check(int s[]);
string insert_last(string s,int q,int b[]);
string string_insert(string s,int p,int i,int j);
//-----------------------------------------------------------------------------------------------
void main() //進入主體程序
{
int i,j,m,n,x,p,q,num,a[4],b[4];
cout<<"\n*******************24 點計算器**********************"<<endl;
cout<<"本程序仍晉宇光的大作,望大家多多指點,不盛感激!!!!!!!"<<endl;
cout<<"\n本程序的功能是完成對用戶給出的四個數進行運算,找出所有能夠計算出24的組合!!!!"<<endl;
cout<<"參數說明:請輸入四個自然數,否則程序不予處理!!!!!"<<endl;
cout<<"請輸入你要給出的四個數:"<<endl;
while(1) {cout<<"第一個數:"; cin>>four[0]; if(four[0]<=0) cout<<"你輸入的數是非法的!"<<endl;else break;}
while(1) {cout<<"第二個數:"; cin>>four[1]; if(four[1]<=0) cout<<"你輸入的數是非法的!"<<endl;else break;}
while(1) {cout<<"第三個數:"; cin>>four[2];if(four[0]<=0) cout<<"你輸入的數是非法的!"<<endl;else break;}
while(1) {cout<<"第四個數:"; cin>>four[3];if(four[0]<=0) cout<<"你輸入的數是非法的!"<<endl;else break;}
cout<<"你輸入的四個數分別爲:"<<endl;
for(i=0;i<4;i++) cout<<four[i]<<",";
cout<<endl<<"以下是程序輸出的結果:"<<endl;
//以下程序便進入了計算和查找!!!!!!!!!!!!!!!!!!!
g=1;
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
{ x=1;
for(num=0;num<4;num++)
if(num!=i&&num!=j) {three[x]=four[num]; x++;}
count(a,four[i],four[j]); //將fout數組當中兩個數的四則運算的結果保存到a[]數組當中
for(p=0;p<4;p++)
{ if(a[p]!=-1)
{three[0]=a[p];
for(m=0;m<2;m++)
for(n=m+1;n<3;n++)
{
for(num=0;num<3;num++) if(num!=m&&num!=n) two=three[num];
count(b,three[m],three[n]); //將three數組當中的兩個數的四則運算結果保存到b[]中
for(q=0;q<4;q++)
{ if(b[q]!=-1)
{if((b[q]+two)==24) com(four[i],four[j],p,q,three[m],three[n],1,b);
if((b[q]*two)==24) com(four[i],four[j],p,q,three[m],three[n],3,b);
if(b[q]>two)
{if((b[q]-two)==24) com(four[i],four[j],p,q,three[m],three[n],2,b);
if(two!=0)
if((b[q]%two)==0) if((b[q]/two)==24) com(four[i],four[j],p,q,three[m],three[n],4,b);
}
else
{if((two-b[q])==24) com(four[i],four[j],p,q,three[m],three[n],2,b);
if(b[q]!=0) if((two%b[q])==0)if((two/b[q])==24) com(four[i],four[j],p,q,three[m],three[n],4,b);
}
}
}
}
}
}
}
}
//-------------------------------------------------------------------------------------------
void count(int s[],int i,int j ) //將i和j進行四則運算並把結果保存到s[]數組當中
{
s[0]=i+j;
if(i>=j)
{s[1]=i-j;
if(j!=0) if(i%j==0) s[3]=i/j; else s[3]=-1;
else s[3]=-1;
}
else
{s[1]=j-i;
if(i!=0) if(j%i==0) s[3]=j/i; else s[3]=-1;
else s[3]=-1;
}
s[2]=i*j;
}
//-----------------------------------------------------------------------------------------------
string string_insert(string s,int p,int i,int j) //將運算結果字符化並保存到string類當中
{ char c[10];
if(i!=-1)
switch (p)
{case 0:
{itoa(i,c,10); s.insert(0,c);s.insert (s.size(),"+");itoa(j,c,10);s.insert(s.size(),c);break;}
case 1:
if(i>=j)
{itoa(i,c,10); s.insert(0,c); s.insert (s.size(),"-");itoa(j,c,10); s.insert(s.size(),c);break;}
else
{itoa(j,c,10); s.insert(0,c); s.insert (s.size(),"-");itoa(i,c,10); s.insert(s.size(),c);break;}
case 2:
{itoa(i,c,10); s.insert (0,c);s.insert (s.size(),"*");itoa(j,c,10);s.insert(s.size(),c); break;}
case 3:
if(i>=j)
{itoa(i,c,10); s.insert(0,c); s.insert (s.size(),"/"); itoa(j,c,10); s.insert(s.size(),c);break;}
else
{itoa(j,c,10); s.insert(0,c); s.insert (s.size(),"/"); itoa(i,c,10); s.insert(s.size(),c);break;}
}
else
switch (p) //將另一個數插
{case 0:
{s.insert(s.size(),"+"); itoa(j,c,10); s.insert(s.size(),c);break;}
case 1:
if(three[0]>=j)
{s.insert(s.size(),"-"); itoa(j,c,10); s.insert(s.size(),c);break;}
else
{s.insert(0,"-"); itoa(j,c,10); s.insert(0,c);break;}
case 2:
{s.insert(s.size(),"*");itoa(j,c,10);s.insert(s.size(),c);break;}
case 3:
if(three[0]>=j)
{s.insert(s.size(),"/");itoa(j,c,10);s.insert(s.size(),c);break;}
else
{s.insert(0,"/");itoa(j,c,10);s.insert(0,c);break;}
}
//cout<<"string_insert is call:"<<s<<endl;
return s;
}
//-----------------------------------------------------------------------------------------------------
void com(int i,int j,int p,int q,int m,int n,int num,int b[])
{ string s,temp;
s=string_insert(s,p,i,j); // s當中進入兩個數
s.insert(0,"("); s.insert (s.size(),")");
if(m==three[0]||n==three[0])
if(m==three[0])
{s=string_insert(s,q,-1,n);s=insert_last(s,q,b);} //S當中再一次進入兩個數
else
{s=string_insert(s,q,-1,m);s=insert_last(s,q,b);} //S當中再一次進入兩個數
else
temp=string_insert(temp,q,m,n); //S當中有兩個數,temp當中也有兩個數,下面的程序是把這兩個變量聯起來
//cout<<"temp.size()="<<temp.size()<<endl;
if(temp.size()!=0) //聯接S和TEMP這兩個字段
{ temp.insert(0,"(");temp.insert(temp.size(),")");
switch (num)
{ case 1:
{ s.insert (s.size(),"+");s.insert(s.size(),temp);break;}
case 2:
if(b[q]>=two)
{s.insert(0,"-");s.insert (0,temp);break;}
else
{s.insert (s.size(),"-");s.insert (s.size (),temp);break;}
case 3:
{s.insert (s.size(),"*");s.insert (s.size(),temp);break;}
case 4:
if(b[q]>=two)
{s.insert(0,"/");s.insert (0,temp);break;}
else
{s.insert(s.size(),"/");s.insert(s.size(),temp);break;}
}
}
cout<<"第"<<g<<"個結果是:"<<s<<"=24"<<endl; g++;
}
//------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
string insert_last(string s,int q,int b[])
{ char ch[10];
if((b[q]+two)==24) {s.insert(0,"("); s.insert(s.size(),")"); s.insert(s.size(),"+"); itoa(two,ch,10);s.insert(s.size(),ch);}
if((b[q]*two)==24) {s.insert(0,"("); s.insert(s.size(),")"); s.insert(s.size(),"*"); itoa(two,ch,10);s.insert(s.size(),ch);}
if(b[q]>=two)
{ if((b[q]-two)==24) {s.insert(0,"("); s.insert(s.size(),")"); s.insert(s.size(),"-"); itoa(two,ch,10);s.insert(s.size(),ch);}
if((b[q]/two)==24) {s.insert(0,"("); s.insert(s.size(),")"); s.insert(s.size(),"/"); itoa(two,ch,10);s.insert(s.size(),ch);}
}
else
{ if((two-b[q])==24) {s.insert(0,"("); s.insert(s.size(),")"); s.insert(0,"-"); itoa(two,ch,10);s.insert(0,ch);}
if((two/b[q])==24) {s.insert(0,"("); s.insert(s.size(),")"); s.insert(0,"/"); itoa(two,ch,10);s.insert(0,ch);}
}
return s;
}
//---------------------------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -