程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVA - 11291 Smeech (模擬)

UVA - 11291 Smeech (模擬)

編輯:C++入門知識

UVA - 11291 Smeech (模擬)


Description

Download as PDF\

Problem B: Smeech

ProfessZ喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vciBPY3Rhc3RpY2hzIGhhcyBpbnZlbnRlZCBhIG5ldyBwcm9ncmFtbWluZyBsYW5ndWFnZSwgU21lZWNoLiBBbiBleHByZXNzaW9uIGluIFNtZWVjaCBtYXkgYmUgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyLCBvciBtYXkgYmUgb2YgdGhlIGZvcm0KPHR0Pig8ZW0+cGU8c3ViPjE8L3N1Yj5lPHN1Yj4yPC9zdWI+PC9lbT4pIDwvdHQ+d2hlcmUgPGVtPnA8L2VtPiBpcyBhIHJlYWwgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSAoaW5jbHVzaXZlKSBhbmQKPGVtPmU8c3ViPjE8L3N1Yj48L2VtPiBhbmQgPGVtPmU8c3ViPjI8L3N1Yj48L2VtPiBhcmUgU21lZWNoIGV4cHJlc3Npb25zLiBUaGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgYSBTbWVlY2ggZXhwcmVzc2lvbiBpcyBhcyBmb2xsb3dzOgoKQW4gaW50ZWdlciByZXByZXNlbnRzIGl0c2VsZiBXaXRoIHByb2JhYmlsaXR5IDxlbT5wPC9lbT4sIDx0dD4oPGVtPnBlPHN1Yj4xPC9zdWI+ZTxzdWI+Mjwvc3ViPjwvZW0+KTwvdHQ+IHJlcHJlc2VudHMKPGVtPngmIzQzO3k8L2VtPiB3aGVyZSA8ZW0+eDwvZW0+IGlzIHRoZSB2YWx1ZSBvZiA8ZW0+ZTxzdWI+MTwvc3ViPjwvZW0+IGFuZCA8ZW0+eTwvZW0+IGlzIHRoZSB2YWx1ZSBvZgo8ZW0+ZTxzdWI+Mjwvc3ViPjwvZW0+OyBvdGhlcndpc2UgaXQgcmVwcmVzZW50cyA8ZW0+eC15PC9lbT4uIApHaXZlbiBhIFNtZWVjaCBleHByZXNzaW9uLCB3aGF0IGlzIGl0cyBleHBlY3RlZCB2YWx1ZT8KPHA+SW5wdXQgY29uc2lzdHMgb2Ygc2V2ZXJhbCBTbWVlY2ggZXhwcmVzc2lvbnMsIG9uZSBwZXIgbGluZSwgZm9sbG93ZWQgYnkgYSBsaW5lIGNvbnRhaW5pbmcgKCkuIEZvciBlYWNoIGV4cHJlc3Npb24sIG91dHB1dCBpdHMgZXhwZWN0ZWQgdmFsdWUgdG8gdHdvIGRlY2ltYWwgcGxhY2VzLgo8L3A+CjxoMz5TYW1wbGUgSW5wdXQ8L2gzPgo8cHJlIGNsYXNzPQ=="brush:java;">7 (.5 3 9) ()

Output for Sample Input

7.00
3.00
題意:給出個表達式(p,e1,e2)表示(e1+e2)*p+(e1-e2)*(1-p)的結果,求最後的值
思路:遞歸的處理整個式子,注意細節小數的時候的判斷
#include 
#include 
#include 
#include 
using namespace std;
const int maxn = 10005;

char str[maxn];
int cur, len;

double cal() {
	double op = 1;
	while (!(str[cur]=='(' || (str[cur]>='0'&&str[cur]<='9') || str[cur]=='-') && cur < len)
		cur++;

	if (str[cur] == '-') {
		cur++;
		op = -1;
	}

	if (str[cur] == '(') {
		cur++;
		double w = 0.1, p = 0;
		if (str[cur] == '.' || str[cur+1] == '.') {
			if (str[cur+1] == '.')
				cur++;
			for (int i = cur+1; str[i] >= '0' && str[i] <= '9' && str[i]; i++, cur = i) {
				p = p + (str[i] - '0') * w;
				w *= 0.1;
			}
		}
		else p = str[cur++] - '0';
		double a, b;
		a = cal();
		b = cal();
		return (a + b) * p + (a - b) * (1 - p);
	}
	else {
		double p = 0;
		for (int i = cur; str[i] >= '0' && str[i] <= '9' && str[i]; i++, cur = i)
			p = p * 10 + str[i] - '0';
		return op * p;
	}
}

int main() {
	double p, a, b;
	while (gets(str) && strcmp(str, "()")) {
		len = strlen(str);
		cur = 0;
		printf("%.2lf\n", cal());
	}
	return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved