(代码非原创)

解题思路:
    对于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.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论