1. 程式人生 > >|Tyvj|NOIP2013|模擬|P2772 表示式求值

|Tyvj|NOIP2013|模擬|P2772 表示式求值

http://tyvj.cn/p/2772

此題由於我不喜歡用棧寫表示式(分明是不會),所以用個連結串列亂搞AC了。。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int sz[100005];//數字 
int bh[100005];//標號,連結串列儲存 
int s_n = 0;
char fh[100005];//符號 
int f_n = 0;
char lastch=' ',ch;
int main () 
{ 
	//freopen("123.in","r", stdin);
	memset(sz, 0, sizeof(sz));
	int i = 0;
	ch = getchar();
	while(ch!='\n')
	{
		if (ch=='+'||ch=='*') fh[++f_n] = ch;
		if (ch>='0'&&ch<='9')
		{
			if(lastch>='0'&&lastch<='9')
			{
				sz[s_n] = (sz[s_n] * 10 + ch - '0') % 10000;
			} else sz[++s_n] = ch - '0';
		}
		lastch = ch;
		ch = getchar();
	} 
	for (int i=1;i<=s_n;i++) bh[i] = i+1;
	bh[s_n] = 10000000;
	for (int i=1;i<=f_n;i++)
	{
		if(fh[i]=='*')
		{
			sz[bh[i]] = sz[i] * sz[bh[i]] % 10000;
			sz[i] = 765428;
		}
	}
	int tot = 0;
	for (int i=1;i<=s_n;i=bh[i])
	{
		if (sz[i]!=765428)
			tot = (tot+sz[i])%10000;
	}
	printf("%d\n", tot);
	return 0;
}


相關推薦

|Tyvj|NOIP2013|模擬|P2772 表示式

http://tyvj.cn/p/2772 此題由於我不喜歡用棧寫表示式(分明是不會),所以用個連結串列亂搞AC了。。 #include<cstdio> #include<cstri

資料結構第二次作業(表示式【棧模擬】)

實驗題目:棧的應用-算術表示式求值                       實驗目的 : 1.掌握棧的定義及實現; 2.掌握利用棧求解算術表示式的方法。 實驗內容: 通過修改完善教材中的演算法3.4,利用棧來實現算術表示式求值的演算法。對演算法3.4中呼叫的幾個函式要

表示式模擬

Description Dr.Kong設計的機器人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它知道函式min(20,23)的值是20 ,add(10,98) 的值是108等等。經過訓練,Dr.Kong設計的機器人卡多甚至會計算一種巢狀的更復雜的表示式。

使用棧實現表示式

看書學了一晚上這個內容,終於實現了 分為三個步驟:   0. 檢查輸入是否有誤(因為輸入其他的非預期字元,程式就會崩潰,我就試著加了一個檢查輸入的函式)   1. 先將正常的中綴表示式轉換為字尾表示式   2. 再進行求值 根據字尾表示式求值比較簡單,因為字尾表示式已經有了優先順序。 比較難懂的是

表示式(堆疊)

思路: (1)建立兩個字元型的堆疊和一個浮點數的堆疊 (2)先輸入表示式,將表示式轉換為字尾表示式 (3)求出字尾表示式的結果 #include<iostream> #include<cstring> #include<cstdio> using namesp

刁肥宅詳解中綴表示式問題:C++實現順序/鏈棧解決

       1. 表示式的種類        如何將表示式翻譯成能夠正確求值的指令序列,是語言處理程式要解決的基本問題,作為棧的應用事例,下面介紹表示式的求值過程。 任何一個表示式都是由

資料結構——表示式(程式碼)

表示式求值 C++ 環境codeblocks17 通過 /* 表示式求值,可用運算子 +-/*(){}[] @CGQ 2018/10/30 */ #include<stdio.h> #include<stdlib.h> #include<ctype.h>

C語言_解決括號匹配問題和逆波蘭表示式為題

##1、括號匹配問題: 解決思路: void MatchBrackets (const char* str) { char* per = NULL; int i = 0; Stack s; assert (str != NULL); InitStack (&s);

表示式--資料結構課本演算法實現

這篇部落格介紹的表示式求值是用C語言實現的,只使用了c++裡面的引用。 資料結構課本上的一個例題,但是看起來很簡單,實現卻遇到了很多問題。 這個題需要構建兩個棧,一個用來儲存運算子OPTR, 一個用來儲存數字OPND。 但是,數字和運算子都定義成字元型棧嗎? 出現了問題,當運算結果或中間結果為負時,沒

表示式-中序表示式轉換成後序表示式然後

/*表示式求值,先轉換成字尾表示式,再計算。 //從中綴表示式中從左往右依次取出資料 //如遇到運算元,直接輸出到字尾的佇列裡。 //如果遇到操作符(包括括號),這裡再定義一個存放操作符的棧,則: //i.如果操作符是'(',入棧 //ii.如果操作符是')',則把棧裡的操作符依次出棧並插入到字尾序

leet150. 逆波蘭表示式

題目: 求在 逆波蘭表示法 中算術表示式的值。 有效的運算子號包括 +, -, *, / 。每個運算物件可以是整數,也可以是另一個逆波蘭計數表達。 例如: ["2", "1", "+", "3", "*

表示式(exp) - 表示式 - 搜尋

題目大意: 給定n(=7)和s,以及一個表示式(僅有 a i

LeetCode:逆波蘭表示式【150】

LeetCode:逆波蘭表示式求值【150】 題目描述 根據逆波蘭表示法,求表示式的值。 有效的運算子包括 +, -, *, / 。每個運算物件可以是整數,也可以是另一個逆波蘭表示式。 說明: 整數除法只保留整數部分。 給定逆波蘭表示式總是

佇列&棧//逆波蘭表示式

根據逆波蘭表示法,求表示式的值。 有效的運算子包括 +, -, *, / 。每個運算物件可以是整數,也可以是另一個逆波蘭表示式。 說明: 整數除法只保留整數部分。 給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且

棧的表示式---通過運算子的優先順序比較

#include <iostream> #include <stdlib.h> using namespace std; struct SqStack { char *base; char *top; }; int cmp[10][10] = { {'>','&g

表示式 NYOJ - 35

題解 題目連結 先將表示式字串去掉等號後使用逆波蘭規則轉換為字尾表示式然後計算 AC程式碼 #include <stdio.h> #include <bits/stdc++.h> using namespace std; typedef long long

牛客練習-表示式

今天上課,老師教了小易怎麼計算加法和乘法,乘法的優先順序大於加法,但是如果一個運算加了括號,那麼它的優先順序是最高的。例如: 1 2 3 4 1+2*3=7 1*(2+3)=5 1*2*3=6 (1+2)*3=9 現在小易希望你幫他

棧:棧及表示式與迷宮問題的簡單應用

棧 棧是一種進出受限的線性表。即僅可在一端進出資料,於是具有FILO(first in last out 先進後出)這種特點。 適合於各種需要回退到上一狀態的應用場景。並且通過對進出規則的進一步控制,將優先順序轉化為出現位置的先後順序上。 ADT Stack{   資料物件:同一資料

java棧應用之表示式

原始碼的github地址,可以下載到本地執行 package stack.demo; import java.io.IOException; import java.util.Scanner; import java.util.Stack; /** * 表示式求值 算符優先

簡單表示式

char EvaluateExpression(){//表示式求值 SqStack OPND,OPTR; SElemType theta,a,b,e; int count=0; Initstack(&OPND); Initstack(&OPTR); Push(&