IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 蓝桥杯_带分数C++(dfs与STL) -> 正文阅读

[C++知识库]蓝桥杯_带分数C++(dfs与STL)

问题描述:
??100 可以表示为带分数的形式:100 = 3 + 69258 / 714。还可以表示为:100 = 82 + 3546 / 197。注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。类似这样的带分数,100 有 11 种表示法。
输入:从标准输入读入一个正整数N (N< 1000*1000)
输出:程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。 注意:不要求输出每个表示,只统计有多少表示法!

样式输入:100
样式输出:11

方法一:这里采用algorithm库中的next_permutation,该函数是进行所有数的全排列,可以列出1-9的全排列,从而只需要考虑符号的位置

//用vector比普通数组慢一些
//使用STL——next_permutation(first,end)
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
int lenth(int n);
int num(int i,int j,vector<int> v);

int main(){
    int n,i,j,count=0;
    vector<int> v;
    for(i=1;i<=9;i++){
        v.push_back(i);
    }//将1-9数读入vector
    cin>>n;
    do{
        for(i=0;i<=lenth(n);i++){
            for (int j = i; j < 8; j++) {
                    if (j - i < 8 - j) 
                        continue;
                int a=num(0,i,v);
                int b=num(i+1,j,v);
                int c=num(j+1,8,v);
                if((n==a+b/c)&&(b%c==0)){
                    count++;
                }
            }
        }
    }while(next_permutation(v.begin(),v.end()));//排列1-9,同时进行演算
    cout<<count<<endl;
    return 0;
}

int lenth(int n){
    int len=0;
    while(n){
        len++;
        n=n/10;
    }
    return len;
}

int num(int i,int j,vector<int> v){
    int sum=0,m;
    for(m=i;m<=j;m++){
        sum=sum*10+v[m];
    }
    return sum;
}

方法二:dfs

#include <iostream>

using namespace std;

int a[10]={0,1,2,3,4,5,6,7,8,9};
int book[10];
int total=0,N;
void judge(int a[]);
void dfs(int step);

int main(){
    cin>>N;
    dfs(1);
    cout<<total;
    return 0;
}

int num(int x,int y){
    int num=0,i;
    for(i=x;i<=y;i++){
        num=num*10+a[i];
    }
    return num;
}

void judge(int a[]){
    int i,j;
    for(i=1;i<=7;i++){
        int interger=num(1,i);//控制分子
        for(j=(9-i)/2+i;j<=9;j++){
            int fz=num(i+1,j-1);
            int fm=num(j,9);
            if(interger+fz/fm==N&(fz%fm==0))
                total++;
        }
    }
}

void dfs(int step){
    if(step==10){
        judge(a);
    }
    for(int i=1;i<=9;i++){
        if(book[i]==0){
            a[step]=i;
            book[i]=1;
            dfs(step+1);
            book[i]=0;
        }
    }
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:34:13  更:2021-07-30 12:35:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 11:00:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码