syyyy


私信TA

用户名:syyyyyy

访问量:293

签 名:

等  级
排  名 39187
经  验 386
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 南京林业大学
专  业

  自我简介:

TA的其他文章

c++做法题解
浏览:172

(代码非原创)

解题思路:
    对于1、2、3、4、5、6、7、8、9这9个数字,获取所有可能的排列组合,每得到一种组合便对当前字符串进行拆分,拆分成3个部分:整数部分;分数分子;分数分母。不难想到,整数部分的位数可以为0、1、2、3、4、5、6、7,分子和分母的位数则都是1~7,而且当整数部分获得前i个数字后,分子则获得从i到j之间的字符串,分母则获得j之后的字符串。因此i、j相当于2个断点,对字符串进行了分割。范围分别是(0, i)、(i, j)、(j, strlen()+1),这个范围可以根据substr()函数参数的特点来理解。


值得学习的地方

  1.  next_permutation()函数:可以是对字符串使用,也可以是对数组使用。传入参数为(字符串首地址, 字符串最后一个有效元素的后一个位置地址),当然对于数组也类似。常常和do while 循环连用,如果存在下一个排列组合则返回true,否则返回false

  2. atoi将一个数字字符组成的字符串转换成int值

  3. string类的某个对象调用 .c_str()成员函数则将string类型字符串转化成char[]类型字符串

    

参考代码:

#includeusing namespace std;
int main()
{
    int n;
    int count = 0;
    string s = "123456789";
    cin >> n;
    
    do
    {
        for(int i = 0; i = n)
                break;        
            
            for(int j = 1; j <= 9-i-1; j++)
            {
                string b = s.substr(i, j);
                string c = s.substr(i+j, 9);
                int intb = atoi(b.c_str());
                int intc = atoi(c.c_str());
                
                if(inta + intb/intc == n && intb % intc == 0)
                    count++;
            }
        }
    }
    while(next_permutation(s.begin(), s.end()));
    
    cout << count << endl;
}


 

0.0分

1 人评分

  评论区

  • «
  • »