1,列出前50个素数
#include <stdio.h>
int main()
{
int x;
int cnt = 0;
x = 1;
while ( cnt <50 ) {
int i;
int isPrime = 1; // x是素数
for ( i=2; i<x; i++ ) {
if ( x % i == 0 ) {
isPrime = 0;
break; //判断这个数是不是素数,是的话跳出for循环
}
}
if ( isPrime == 1 ) {
cnt ++; //个数自加
printf("%d\t", x); //输出这个素数,\t表示对齐
if ( cnt %5 == 0 ) {
printf("\n"); //表示每5个数进行换行
}
}
x++;
}
return 0;
}
看下运行结果 :
2多重for循环嵌套,与break跳出多重循环,和goto
例:用1毛,2毛,5毛组合出输入的金额,
第一个,后续会优化
多个for循环嵌套,先由1毛循环,在循环里嵌套就可以实现这种列举问题,
#include <stdio.h>
int main()
{
int a=1; //一毛
int b=2; //俩毛
int c=5; //五毛
int x; //输入金额
scanf("%d",&x);
int mon = x*10;//对前面的金额都扩大了10倍,该处也*10
for(a=1;a<mon*10;a++){
for(b=2;b<mon*10;b++){
for(c=5;c<mon*10;c++){
if(a+b*2+c*5==mon){
printf("%d个1毛,%d个俩毛,%d个五毛,可以凑出%d元 \n",a,b,c,x);
}
}
}
}
return 0;
}
看下运行结果
而在实际生活当中,我们往往只需要一种结果即可,代码如下:(我们只需要在每一层循环后面加上break跳出,而使得break跳出的条件是什么呢?定义一个变量exit,在有一种方法时改变exit的值,再在每一层的for循环中插入if判断exit的值,决定是否break)
#include <stdio.h>
int main() {
int a=1; //一毛
int b=2; //俩毛
int c=5; //五毛
int x; //输入金额
int exit = 0;
scanf("%d",&x);
int mon = x*10;//对前面的金额都扩大了10倍,该处也*10
for(a=1; a<mon*10; a++) {
for(b=2; b<mon*10; b++) {
for(c=5; c<mon*10; c++) {
if(a+b*2+c*5==mon) {
printf("%d个1毛,%d个俩毛,%d个五毛,可以凑出%d元 \n",a,b,c,x);
exit = 1;
break;
}
}
if(exit==1) {
break;
}
}
if(exit==1) {
break;
}
}
return 0;
}
看下结果:
针对于上面的break跳出还有一种方法,goto
goto name
name :
#include <stdio.h>
int main() {
int a=1; //一毛
int b=2; //俩毛
int c=5; //五毛
int x; //输入金额
scanf("%d",&x);
int mon = x*10;//对前面的金额都扩大了10倍,该处也*10
for(a=1; a<mon*10; a++) {
for(b=2; b<mon*10; b++) {
for(c=5; c<mon*10; c++) {
if(a+b*2+c*5==mon) {
printf("%d个1毛,%d个俩毛,%d个五毛,可以凑出%d元 \n",a,b,c,x);
goto out;
}
}
}
}
out:
return 0;
}
结果: