网站开发技术课程报告,网站开发的软硬件环境,四川成都哪里好玩,wordpress 添加微博关注枚举就是根据提出的问题#xff0c;——列出该问题的所有可能的解#xff0c;并在逐一列出的过程中#xff0c;检验每个可能解是否是问题的真正解#xff0c; 如果是就采纳这个解#xff0c;如果不是就继续判断下一个。 枚举法一般比较直观#xff0c;容易理解#xff0…
枚举就是根据提出的问题——列出该问题的所有可能的解并在逐一列出的过程中检验每个可能解是否是问题的真正解 如果是就采纳这个解如果不是就继续判断下一个。 枚举法一般比较直观容易理解但由于要检查所有的可能解因此运行效率较低。 能够用枚举法解决的题目往往是最简单的一类题目。这种题具有以下特点 ·解枚举范围是有穷的。 ·检验条件是确定的。
先来看一个简单的问题。 某君说“我的年龄是个两位数我比儿子大27岁如果把我的年龄的两位数字交换位置刚好就是我儿子的年龄” 请你计算某君的年龄一共有多少种可能情况 我们来分析一下这道题。题里给出某君的年龄是两位数那么年龄的取值范围是[10,99]内的整数。 检验条件也是确定的只要把枚举的年龄的个位与十位交换如果发现比原数字刚好小27那么它就是真正的解。 以上的解决思路就是枚举法的一个例子。
#includeiostream
using namespace std;
int main(){int total0;//记录可能解的个数 for(int i10;i99;i){//枚举年龄范围 if(i(i%10)*10i/1027){total;}}couttotalendl;return 0;
}在判断条件中我们通过对10取模的方式来获取一个数的个位数。用除10的方法来获取一个数的十位数。(在程序中整型数字与整型数字相除表示整除所以除10会让数字的个位数字被舍去其余的十进制每一位向右移动一位。 这道题是第七届蓝桥杯C/C语言A组的题目。
前面的课程里我们已经学习了如何输出1到100 范围内的所有质数。接下来我们要实现输出n到m之间所有质数的程序。n,m保证为正整数。 首先我们肯定需要定义并读入两个整数n,m,把
int n;修改为
int n,n;
cinnm;并将外层循环结构改为
for(int jn;jm;j){}#includeiostream
using namespace std;
int main(){int n,m;cinnm;for(int jn;jm;j){if(j1){continue;}bool is_primetrue;for(int i2;ij;i){if(j%i0){is_primefalse;break;}}if(is_prime){coutjendl;}}return 0;
}观察数字12321123321都有一个共同的特征就是无论从左到右读还是从右向左读都是相同的。这样的数字叫做回文数字。 现在要从5位或6位的十进制数字中找出各个数位之和等于n的回文数字。 输入格式 输入一个整数n10≤n≤100)。 输出格式 输出所有各个数位之和等于n的5位和6位整数每个数字占一行 数字按从小到大的顺序排列。如果没有满足条件的数字则输出-1. 样例输入
48样例输出
699996
789987
798897
879978
888888
897798
969969
978879
987789
996699#includeiostream
using namespace std;
int n;
int digit[6];
bool judge(int x){int m0,sum0;while(x){digit[m]x%10;sumx%10;x/10;}if(sum!n){return false;}for(int i0;im/2;i){if(digit[i]!digit[m-1-i]){return false;}}return true;}int main(){bool f false;cinn;for(int i10000;i1000000;i){if(judge(i)){coutiendl;ftrue;}}if(!f){cout-1endl;}return 0;}如果一个4位数它的每个位上的数字的4次幕之和等于它本身那么我们就称这个数字为一个四叶玫瑰数。现在我们要求出n以内所有的四叶玫瑰数。 首先我们读入了一个整数n由于四叶玫瑰数一定是个四位数那我们首先将其它位数的数字排除请在return 0之前写
if(n1000||n9999){couterror!;
}else{}接下来我们要依次枚举从1000开始到n之间的数字哪些符合四叶玫瑰数的要求并将它输出。在这里我们将判断四叶玫瑰数的代码封装成一个自己定义的函数rose我们先在else分支中写
for(int i1000;in;i){if(rose(i)){coutiendl;}
}输入一个四位数n看看1000到n之间有没有四 叶玫瑰数吧。 ·事实上一共有三个四叶玫瑰数他们分别是 1634,8208,9474
#includeiostream
#includecmath
using namespace std;
bool rose(int i){int ai/1000,bi/100%10,ci/10%10,di%10;int ansa*a*a*ab*b*b*bc*c*c*cd*d*d*d;if(ansi){return true;}else{return false;}
}
int main(){int n;cinn;if(n1000||n9999){couterror!;}else{for(int i1000;in;i){if(rose(i)){coutiendl;}}}
}某君从某年开始每年都举办一次生日party并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来他一共吹熄了236根蜡烛。那么他从几岁开始过生日party的。从常识来讲一个人的年龄不可能超过200岁。 因此我们需要枚举这个人的开始过生日的年龄 从0到200,请在return 0之前写
for(int i1;i200;i){}接下来我们需要依次枚举他从某岁到某岁之间会吹多少蜡烛。如果这个数目超过236我们就不关心了同时我们并不知道这中间过了多少岁所以无法确定循环次数因此这里使用while循环更合适请在for循环中写
int can0,ji;
while(can236j200){canj;j;
}其中变量can用于记录蜡烛数目j是一个累加变量。
跳出while循环后如果蜡烛的数目恰好等于236 说明枚举条件成立变量的值就是他开始过 生日时的年龄。 请接着写
if(can236){coutiendl;
}其中变量can用于记录蜡烛数目j是一个累加变量。 运行一下看看结果是不是26。 想一想如果我们还想知道他今年多少岁应该怎 么做呢
#includeiostream
using namespace std;
int main(){for(int i1;i200;i){int can0,ji;while(can236j200){canj;j;}if(can236){coutiendl;}}return 0;
} 有些人很迷信数字比如认为带4的数不吉利。某抽奖活动的奖券号码是5位数10000-99999要求其中不要出现带“4”的 号码主办方想让你计算一下如果发行号码n到m之间的奖券在任何两张奖券都不重复的情况下可以发行多少张 输入格式 输入为一行为两个空格隔开的整数nm 10000 n m 99999. 输出格式 输出为一个整数为可发出奖券的数目。 样例输入
10000 99999样例输出
52488#includeiostream
using namespace std;
bool judge(int x){while(x){if(x%105){return true;}x/10;}return false;
}
int main(){int n,m,cnt0;cinnm;for(int in;im;i){if(!judge(i)){cnt;}}coutcntendl;return 0;
}