20701除法
难度级别: B; 编程语言:不限;运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述
    输入正整数n,按从小到大的顺序输出所有满足表达式abcde/fghij=n的abcde和fghij,其中a~j恰好为数字0~9的一个排列。 如果没有符合题意的数,输出0。本题所说的五位数可以包括前导0的,如01234在这里也称为五位数。
输入
一个正整数n 
输出
若干行,每行包括两个符合要求的五位正整数(每行的两个数先大后小),两数之间用一个空格隔开。 
输入示例
62
输出示例
79546 01283
94736 01528
其他说明
数据范围 2≤n≤79;题目中的从小到大指的是输出数据每行的第一个数是从小到大的顺序。 

据题意可知,这道题可以用暴搜解决,不过一般的暴搜在这题上要每一位都用一个循环,这道题2个数,每个数5位(万位可以为0),按理说10位数,10个循环,对不?但这里只要枚举一个数,另一个数可以求出来的。我们当然选择枚举小的那个数(其实哪个都一样),也就是除数,那么被除数应该用这个枚举出来的数×n;如果枚举大的那个数,也就是被除数,那么除数应该用这个枚举出来的数÷n。我们用p[10]数组存储这两个数,同时方便全查找是否有重复。这是最基础的办法,也是最好理解的办法。

这题是刘汝佳一册P114或刘汝佳二册P182的题,第七讲“暴力求解法”的第一题,只是讲了一下思路,没给代码。在这之前说一下,这道题为什么一定要只要枚举一个数。我们可以知道,如果枚举0-9的所有排列,会有10!=3628800轮循环,听起来枚举量还不大,是吧?如果只枚举一个,循环量会掉到5!=120轮,比比程序运算量吧!

下面是代码,用的最笨的暴搜,这题n最大79,而且每种数据可能性不多,所以暴搜可以做。

本程序枚举的是除数,然后乘出被除数。

#include<iostream>
using namespace std;
int n,a,b,p[10],h,i;
bool isit,ih;//isit检查每组被除数和除数是否合法,ih检查最后是否有结果
int main()
{
cin>>n;
for(p[0]=0;p[0]<=9;p[0]++)//除数万位
for(p[1]=0;p[1]<=9;p[1]++)//除数千位
for(p[2]=0;p[2]<=9;p[2]++)//除数百位
for(p[3]=0;p[3]<=9;p[3]++)//除数十位
for(p[4]=0;p[4]<=9;p[4]++)//除数个位
{
if(p[0]!=p[1] && p[0]!=p[2] && p[0]!=p[3] && p[0]!=p[4] && p[1]!=p[2] && p[1]!=p[3] && p[1]!=p[4] && p[2]!=p[3] && p[2]!=p[4] && p[3]!=p[4])//查找除数是否有重复数字。其实这样可以省去很多后面的被除数运算量!如果算完除数有重复还算被除数,一看很多重复,会做很多无用功。
{
a=p[0]*10000+p[1]*1000+p[2]*100+p[3]*10+p[4];//计算除数
b=a*n;//算出被除数
if(9999<b && b<100000) //确保10000<=被除数<=99999,想一想,被除数为什么不能低于1w?
{
p[5]=b/10000;//以下是分离被除数
p[6]=(b%10000)/1000;
p[7]=(b%1000)/100;
p[8]=(b%100)/10;
p[9]=b%10;
isit=1;//看看这组数是不是无重复数字
for(h=0;h<=9;h++)
for(i=h+1;i<=9;i++)
if(p[h]==p[i]) isit=0;//被除数和除数全排查找有没有重复
if(isit)//如果是1就无重复
{
ih=1;//确保有结果
for(i=5;i<=9;i++) cout<<p[i];//切记先打被除数!忽略了一个事,这里可以直接输出b
cout<<' ';
for(i=0;i<=4;i++) cout<<p[i];//后打除数!
cout<<endl;
}
}
}
}
if(!ih) cout<<'0';//没结果出0
return 0;
}

c++20701除法(刘汝佳1、2册第七章,暴搜解决)的更多相关文章

  1. 《算法竞赛入门经典》刘汝佳 C语言部分(前四章)“注解与习题” 之思索 -<1>

    此书我购于去年的十一月份,也是经前人推荐购买的一本比较有用的书籍,在寒假自学此书,其简洁清晰高效的示例代码令我印象深刻,于是我打算把这本书的前四章后面的注解与习题(未给出标准解答)认真的去思索和研究, ...

  2. 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第五章 1(String)

    第一题:401 - Palindromes UVA : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8 ...

  3. ACM题目推荐(刘汝佳书上出现的一些题目)[非原创]

    原地址:http://blog.csdn.net/hncqp/article/details/1758337 推荐一些题目,希望对参与ICPC竞赛的同学有所帮助. POJ上一些题目在http://16 ...

  4. 刘汝佳黑书 pku等oj题目

    原文地址:刘汝佳黑书 pku等oj题目[转]作者:小博博Mr 一.动态规划参考资料:刘汝佳<算法艺术与信息学竞赛><算法导论> 推荐题目:http://acm.pku.edu. ...

  5. [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总

    本文出自   http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner  打开 这个专题一共有25题,刷完 ...

  6. 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第五章 2(Big Number)

    这里的高精度都是要去掉前导0的, 第一题:424 - Integer Inquiry UVA:http://uva.onlinejudge.org/index.php?option=com_onlin ...

  7. 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第六章 1(Lists)

    127 - "Accordian" Patience 题目大意:一个人一张张发牌,如果这张牌与这张牌前面的一张或者前面的第三张(后面称之为一位置和三位置)的点数或花式相同,则将这张 ...

  8. 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第五章 3(Sorting/Searching)

    第一题:340 - Master-Mind Hints UVA:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Item ...

  9. 求双连通分量的详解。(根据刘汝佳的训练指南p314)

    无向图的双连通分量 点-双连通图:一个连通的无向图内部没有割点,那么该图是点-双连通图.         注意:孤立点,以及两点一边这两种图都是点-双连通的.因为它们都是内部无割点. 边-双连通图:一 ...

随机推荐

  1. light oj 1422 Halloween Costumes (区间dp)

    题目链接:http://vjudge.net/contest/141291#problem/D 题意:有n个地方,每个地方要穿一种衣服,衣服可以嵌套穿,一旦脱下的衣服不能再穿,除非穿同样的一件新的,问 ...

  2. hdu1150 匈牙利

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1150 题目大意:有两台机器A和B以及N个需要运行的任务.每台机器有M种不同的模式,而每个任务都恰好在 ...

  3. [自动运维]weblogic自动发布

    近期一个项目属于测试过渡期,bug修复比较频繁,每次都会伴随着项目的打包.上传.发布,此类重复操作近乎每天都会进行,刚好最近在看python相关资料,决定重新将此前学习的weblogic的wlst相关 ...

  4. poj1222 EXTENDED LIGHTS OUT 高斯消元||枚举

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8481   Accepted: 5479 Description In an ...

  5. [转] FastMM、FastCode、FastMove的使用

    http://blog.csdn.net/akof1314/article/details/6524767 FastMM是一个替换Embarcadero Delphi Win32应用程序的快速内存管理 ...

  6. wpf ,tooltip的style

    <Style x:Key="MyToolTipStyle" TargetType="ToolTip"> <Setter Property=&q ...

  7. Sprint回顾_团队听诊器

  8. WebApi:路由和Action选择

      译自:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection   ...

  9. input属性控制弹出键盘类型

    /**   * ios弹起数字键盘有三种方法   * 1. <input type="number"> 可以弹起带有小数点的键盘,可以键盘不干净,有其它各种字符,可切换 ...

  10. topcoder SRM 624 DIV2 CostOfDancing

    排个序,求前k个元素和即可 int minimum(int K, vector <int> danceCost) { sort(danceCost.begin(),danceCost.en ...