1. 程式人生 > >【題解】洛谷各種字串問題合集(持續更新中)

【題解】洛谷各種字串問題合集(持續更新中)

洛谷 P1449 字尾表示式

這道題需要手動模擬棧的操作。讀入字元,當字元不為終止字元@時,如果讀入的是數字就用now記錄下它的值,如果讀入的是 . 就將得到的數字值放到棧頂,並清空now。當讀到運算子時,就拿棧頂元素下面的第一個元素和棧頂元素進行加減乘除的操作,並將棧頂清空,元素退棧,最後輸出棧內剩下的唯一元素即可。要用long long

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long ans[1010];
int main()
{
	long long len=0,now=0;
	char ch;
	while((ch=getchar())!='@')
	{
		if(ch>='0'&&ch<='9')
		{
			now*=10;
			now+=ch-'0';
		}
		else if(ch=='.')
		{
			ans[++len]=now;
			now=0;
		}
		else if(ch=='+')
		{
			ans[len-1]+=ans[len];
			ans[len]=0;
			len--;
		}  
		else if(ch=='-')
		{
			ans[len-1]-=ans[len];
			ans[len]=0;
			len--;
		}  
		else if(ch=='*')
		{
			ans[len-1]*=ans[len];
			ans[len]=0;
			len--;
		}  
		else if(ch=='/')
		{
			ans[len-1]/=ans[len];
			ans[len]=0;
			len--;
		}  
	}
	cout<<ans[1]<<endl;
	return 0;
}

洛谷P1914 小書童——密碼

水題 然而放上來的原因是因為第一次我忘了取mod。。。記得讀入字元後將其變為數字加上n後取mod

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int n;
	cin>>n;
	char ch;
	while(cin>>ch)
	{
		int ans=ch-'a'+n;
		ans%=26;
		printf("%c",ans+'a');
	}
	return 0;
}

洛谷 P2614 計算器彈琴

題目比較繁瑣,然而仔細想想還是能模擬出來的。我這道題是讀入字元來解決的,以空格為界限(讀入字串也可以,不過如果懶得轉換的話這道題給的n是沒有用的)。記錄下沒讀到空格時字元的長度,並初始化w=0.對每個字元進行處理,如果讀到空格或換行就無視,如果讀到“(”就代表音符拍子要變為原來的二分之一,也就是給w++。對於“)”同理w--。如果讀到的是延長字元“.”,就把記錄節拍答案的變數加上自身的二分之一,如果是其他的情況就加上二分之一的w次方。最後輸出整型,算得一共要多少秒演奏完曲子。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
char a[110];
double time=0;
int main()
{
	int n,t,len,w=0;
	cin>>n>>t;
	for(;scanf("%s",&a)==1;)
	{
		len=strlen(a);
		w=0;
		for(int j=0;j<len;j++)
		{
			switch(a[j])
			{
				case ' ':
				case '\n':
				case '\r':
				case '(':w++;break;
				case ')':w--;break;
				case '.':time+=pow(0.5,w+1);break;
				default:time+=pow(0.5,w);	
			}
		}
	}
	int ans=60*time/t;
	cout<<ans<<endl;
	return 0;
}

洛谷P1538 迎春舞會之數字舞蹈

將數字的七個組成部分記錄並列印,注意k的大小。

(To be continued...)