思路
把X 都可以当成 9 来看,因为求的是最大的可能。
所以把所有 X 替换成 9 ,排序一下即可。【排序就很大有文章哦,这可能就是c++的方便之处吧】
在此,我就稍微普及一下c++的string类做题小用法吧,【注意注意菜鸟我还没开始学习c++的具体内容,一切只能从简描述一下吼】
string的小应用 ——就是针对字符串
输入输出
string 用来定义一维字符串 string a;//相当于char a[ ];但是不用考虑a字符串大小,方便*1
头文件#include<string.h>
用c++的输入输出 cin>>s,输入,cout<<s,输出
注意欸——
string str;
cin>>str;
当执行上述语句时,若输入“hello world!”,则只会输出hello。
因为cin语句输入时,遇空格结束,不能用cin输入多个单词。
要是有空格,这要用到这个函数getline(cin,str)(包含头文件#include <string)
注意:gets()函数不能输入字符串,因为gets(s)中,s为字符串数组名或字符串指针。如果用gets(str)就会错误,str是string类型的变量,既不是数组名也不是字符串指针。
cout就没啥问题【i了i了】
一些可爱的应用与小可爱的函数
String类的构造函数和析构函数如下:
a) string s; //生成一个空字符串s
b) string s(str) //拷贝构造函数 生成str的复制品
c) string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值
d) string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值
e) string s(cstr) //将C字符串作为s的初值
f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。
g) string s(num,c) //生成一个字符串,包含num个c字符
h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值
i) s.~string() //销毁所有字符,释放内存
这些基本的赋值粘贴,和取部分字符串,都是很常用的哦
还有赋值,比大小啥的函数
string a,b;
a=b;
就是将b的内容赋值给a,但是b的内容不会变化,还有很多【对,我不会】但对于此题目还是绰绰有余啦
看代码
#include<bits/stdc++.h> //万能开头
using namespace std;
bool strcpm(string s1,string s2) //bool类型判断
{
if(s1.size()!=s2.size())
return s1.size()>s2.size(); //满足s1.size()>s2.size()则返回真,否则返回假
return s1>s2;
//这个字符串比较字典序大小,s1字典序大于s2,返回真,否则返回假
}
int main()
{
int n,i,j,id=0;
string x=" "; //使用 string 时先给其初始化,否则可能出现未知错误
scanf("%d",&n);
for(i=1;i<=n;i++)
{
string s;
cin>>s;
for(j=0;j<s.length();j++) //s.length(),string类型
if(s[j]=='X')
s[j]='9'; //替换
if(strcpm(s,x)) //比较替换
{
x=s;
id=i;
}
}
printf("%d\n",id);
return 0;
}