题目链接
 思路
把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是型的变量,既不是数组名也不是字符串指针。
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;
}