牛客小白月赛105 补题

B lz的数字问题

链接:B-lz的数字问题_牛客小白月赛105

思路:多列举测试用例,考虑完整。首先判断是整数还是小数,小数分整数和小数两部分判断(函数调用最方便!)。注意有<小数的小数部分不够六位>的情况

看个错误代码:

tip(注释里):1.判断整数和小数应遍历整个数组,若出现".",则为小数,否则相反。

2.数组 string ar,aa;后添加新元素ar.push_back('0'); 或ar += aa[j];

3.ar = ar.substr(0,6); 剪切长度为六的数组再比较很简单,这样就不用逐个判断了

substr()是用于字符串处理的预定义函数。此函数将两个值poslen作为参数,并返回一个新构造的字符串对象,其值初始化为该对象的子字符串的副本。从pos开始复制字符串,直到pos + len表示[pos,pos + len)为止。

 

  

 

B wa


#include<bits/stdc++.h>
using namespace std;
int main()
{
	string aa,bb;
	string al,ar;
	string bl,br;
	cin>>aa>>bb;
	int h=0,t=0;
	for(int i=0;i<aa.size();i++){
		if(aa[i]=='.'){
			for(int j=0;j<i;j++){
				al[j]=aa[h];             //2
				h++;
			}
			t=i+1;
			for(int j=0;j<aa.size()-i;j++){
				ar[j]=aa[t];                 //2  
				t++; 
	    	}
	    	break;
    	}
    	else {                             //1
    		for(int i=0;i<aa.size();i++){
				al[i]=aa[i];
			}
			ar={"000000"};
		}

    }
	for(int i=0;i<bb.size();i++){
		if(bb[i]=='.'){
			for(int j=0;j<i;j++){
				bl[j]=bb[h];
				h++;
			}
			t=i+1;
			for(int j=0;j<bb.size()-i;j++){
				br[j]=bb[t];
				t++;
			}
			break;
		}
		else {
    		for(int i=0;i<bb.size();i++){
				bl[i]=bb[i];
			}
			br={"000000"};
		}
	}


	if(al==bl&&ar[0]==br[0]&&ar[1]==br[1]&&ar[2]==br[2]&&ar[3]==br[3]&&ar[4]==br[4]&&ar[5]==br[5])   //3
		cout<<"YES";
	else cout<<"NO";


	return 0;
}

 

下面是对的qwq,把所有要比较的数都存到ans数组里好简单

B ac

 #include<bits/stdc++.h>
using namespace std;
string f(string aa){
	string ans= "";//注意先定义个空字符串
	int ok=0;//遇到了小数点
	int cnt=0;//小数点后有几位
	for(int i=0;i<aa.size();i++){
		if(ok)  cnt++;
		if(aa[i]!='.') ans+=aa[i];//整数部分
		else ok=1;
		if(cnt==6) break;
	}
	for(int i=cnt;i<6;i++){
		ans+='0';//不足补0
	}
	return ans;
}

int main(){
	string aa,bb;
	cin>>aa>>bb;
	if(f(aa)==f(bb)) cout<<"YES";
	else cout<<"NO";
	
	return 0;
}

E lz的括号问题

链接:E-lz的括号问题_牛客小白月赛105

思路:反方向思考,这道题已知的()始终是成对出现,即可以只考虑一方面“(”。

总数n减去<已找到的“(”>即<已匹配的>等于<未匹配的>.

记“(”数量为cnt,当编号为  i  每出现一个"(", cnt++;n-cnt表示答案,若出现")",则 cnt--;

 注意考虑"-1"的两种情况!

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	string s;
	cin>>n>>s;
	vector<int>ans;//定义整数动态数组
	int cnt=0;//未匹配的"("的数量
	for(int i=0;i<s.size();i++){
		if(s[i]=='(') {
			cnt++;
			ans.push_back(n-cnt);//给的是()成对出现
		}
		else cnt--;//匹配一个减一个
		if(cnt<0){//"("数量少
			cout<<"-1";
			return 0;
		}
	}
	
	if(cnt) {//遍历结束后还有未匹配的"("
		cout<<"-1";
		return 0;
	}
	for(int i=0;i<ans.size();i++){
		cout<<ans[i]<<" ";
	}
	return 0;
}

 

posted @ 2024-11-24 23:26  hanbaodao  阅读(3)  评论(0编辑  收藏  举报