csp24點遊戲棧的應用C++100分0ms

有個有趣的小細節 int(數字字符+‘0’)轉化的是二進制,int(數字字符-‘0’)轉化的是十進制數,不知道小夥伴們發現沒有呢?
這是csp題目:
在這裏插入圖片描述在這裏插入圖片描述
利用棧有個缺點就是隻能一個一個進去,也就是說表達式中的數字必須是個位數0-9不能是兩位數哦!
注意:入棧*的時候用小寫x代替哦!!

下面是我臨時寫的測試代碼有註釋 ^ - ^

#include<iostream>
#include<stdlib.h>
#include<stack>//調用棧 
using namespace std;
string s[100];//全局變量長度100
int s_stack(string s,stack<int> &number){
	for(int i=0;i<s.length();++i){//走一遍s 
		if(s[i]>='0'&&s[i]<='9')
		{
			number.push(s[i]-'0');//0-9字符轉換int壓入棧 
		}
		else if(s[i]=='+'||s[i]=='-'){
			(s[i]=='+') ? number.push(s[++i]-'0'):number.push(-(s[++i]-'0'));//不用計算,將下一個數定義爲正數或者負數,壓棧 
		}
		else if(s[i]=='x'||s[i]=='/'){
			if(s[i]=='x'){
				int temp=number.top();//拿出棧頂數 
				number.pop();//刪除棧頂數 
				number.push(temp*(s[++i]-'0'));//和前一個數*再次進入棧 
			}
			else{
				int temp=number.top();//拿出棧頂數 
				number.pop();//刪除棧頂數 
				number.push(temp/(s[++i]-'0'));//和前一個數/再壓入棧 
			}
		} 
	}
	return number.size();
}//算術表達式的數值壓棧 
int result(stack<int> &number){
	int result=0;
	while(!number.empty()){
		result+=number.top();
		number.pop();
	}
	if(result==24){
		return 1;
	}//24返回1,否則返回0 
	return 0;
}//累加棧元素 
int main(){
	system("color 3");
	int n;
	cin>>n;
	for(int i=0;i<n;++i){
		cin>>s[i];
	}
	for(int i=0;i<n;++i){
		stack<int> number;//臨時的棧來存儲 
		s_stack(s[i],number);
		result(number)? cout<<"Yes\n":cout<<"No\n";
	}
	return 0;
}

在這裏插入圖片描述
在這裏插入圖片描述
Ok沒問題很簡單!

發佈了84 篇原創文章 · 獲贊 108 · 訪問量 7913
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章