侯马建设规划局网站学校网站建设团队
news/
2025/9/24 20:10:39/
文章来源:
侯马建设规划局网站,学校网站建设团队,株洲网站设计,网站建设中怎么回事problem statement
这道题给我们一个不超过15位的整数 让我们在其中加等号或者加号 如果加完符号后符合计算结果 那么计数 最后输出所有的情况
problem analysis
这道题其实就是想办法遍历所有情况 把合法的记录下来 最终输出就得到解 如何枚举呢 我们可以枚举等号的位置…problem statement
这道题给我们一个不超过15位的整数 让我们在其中加等号或者加号 如果加完符号后符合计算结果 那么计数 最后输出所有的情况
problem analysis
这道题其实就是想办法遍历所有情况 把合法的记录下来 最终输出就得到解 如何枚举呢 我们可以枚举等号的位置 等号左边dfs一下 等号右边dfs一下 最后最后看两遍结果是否一样 一样就记录 最后左右两遍可以搞两个dfs 如何dfs 就是枚举加号的位置把每一种情况都遍历到就好了
problem code
#includebits/stdc.h
using namespace std;
char a[20];
int num[20][20],len,ans;
void rdfs(int lsum,int pos,int rsum){if(pos len){// 如果走完了所有的数 那么判断左是否等于右 如果等于 就记录结果if(lsumrsum)ans;return;}for(int ipos;ilen;i){rdfs(lsum,i1,rsumnum[pos][i]); //这就相同与ldfs}
}
void ldfs(int k,int mid,int lsum){//k表示当前位置 mid表示等号位置 lsum记录左边的和 if(kmid){// 如果当前位置到mid 我们就搜索右边的和 rdfs(lsum,mid,0);}for(int ik;imid;i){ldfs(i1,mid,lsumnum[k][i]);// 这里就会把所有的加号情况遍历 对每一个位置 下一个加号在k到mid的任何位置都会尝试一遍 也就是对于当前位置 下一个加号的位置都搜索一遍 可以枚举到所有的加号情况 }//左半部分枚举加号
}
int main()
{while(scanf(%s,a)){len strlen(a);if(strcmp(a,END)0)break;for(int i0;ilen;i){for(int j0;jlen;j){int sum0;for(int ki;kj;k)sum sum*10(a[k]-0);//预处理把任意i到j的数的大小求出来num[i][j] sum;}}for(int i1;ilen;i)ldfs(0,i,0);printf(%d\n,ans);ans0;}return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916185.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!