1 条题解

  • 0
    @ 2024-1-21 18:20:56
    首先是要先把数字门牌号转化成字符串,需要用到一个函数to_string,传入一个int类型的整数然后得到一个string返回值,由题目分析,每一个房间号都要用两位,所以对于1-9需要前边补0,比如1号房间的房间号是01,楼层号不需要补0
    所以可以有两层循环,第一层循环遍历楼层第二层循环遍历房间,得到字符串
    然后对于每个字符串,根据题意得到反转之后的字符串,首先用reverse函数左右翻转,然后进行上下颠倒,如果是6就变成9,9就变成6,1、0、8反转后还是不变,其他的数字反转后不构成数字所以肯定不会冲突,可以用一个bool类型表示是否会发生冲突,如果没有遇到会发生冲突的数字还需要比较反转后是否与原来门牌号一样
    
    #include<bits/stdc++.h>
    using namespace std;
    int main() {
    	int n,m;cin>>n>>m;
    	int ans=0;
    	for(int i=1;i<=n;i++) {
    		for(int j=1;j<=m;j++) {
    			string a;
    			// i是楼层号 j是房间号
    			if(j>=1&&j<=9) {
    				string b = to_string(i);
    				string c = to_string(j);
    				a= b + "0" + c;
    			} else {
    				string b = to_string(i);
    				string c = to_string(j);
    				a= b + c;
    			}
                string na = a;
    			reverse(na.begin(),na.end());
    			bool flag = true; //flag为true表示我需要进行标记 
    			for(int k=0;k<a.size();k++) {
    				if(na[k]=='6') na[k]='9';
    				else if(na[k]=='9') na[k]='6';
    				else if(na[k]=='1'||na[k]=='0'||na[k]=='8') ;
    				else flag=false;
    			}
    			if(na!=a) flag = false;
    			if(flag) ans++;
    		}
    	}
    	cout<<ans<<endl;
    }
    
    • 1

    信息

    ID
    386
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    9
    已通过
    5
    上传者