第四周 程序跳转

1.接力break

输入x元,输出用多少个1角,2角,5角来凑成x元

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5   int x;
 6   int one, two, five;
 7 
 8   scanf("%d", &x);
 9   for ( one = 1; one < x*10; one++) {
10     for (two = 1; two < x*10/2; two++) {
11       for ( five = 1; five < x*10/5; five++) {
12         if (one + two*2 + five*5 == x*10) {
13           printf("%d one + %d two + %d five = %d\n", one, two, five, x);
14         }
15       }
16     }
17   }
18 
19   return 0;
20 }

输入2元,输出:

1 one + 2 two + 3 five = 2
1 one + 7 two + 1 five = 2
2 one + 4 two + 2 five = 2
3 one + 1 two + 3 five = 2
3 one + 6 two + 1 five = 2
4 one + 3 two + 2 five = 2
5 one + 5 two + 1 five = 2
6 one + 2 two + 2 five = 2
7 one + 4 two + 1 five = 2
8 one + 1 two + 2 five = 2
9 one + 3 two + 1 five = 2
11 one + 2 two + 1 five = 2
13 one + 1 two + 1 five = 2

假如我只需要一种方法就可以了, 怎么输出一种方案后就停止呢?

如果在13行后,加条break;程序没有什么变化。为什么会这样呢?break只会跳出最内层的for语句。

那么在13,15,16行都加break,假如只这样的话,内层结束后,总会执行break。

所以要加个条件限制,设置一个变量 int exit = 0;  然后在 break  前加 exit = 1;

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5   int x;
 6   int one, two, five;
 7   int exit = 0;
 8 
 9   scanf("%d", &x);
10   for ( one = 1; one < x*10; one++) {
11     for (two = 1; two < x*10/2; two++) {
12       for ( five = 1; five < x*10/5; five++) {
13         if (one + two*2 + five*5 == x*10) {
14           printf("%d one + %d two + %d five = %d\n", one, two, five, x);
15           exit = 1;
16           break;
17         }
18       } 
19       if (exit) break;
20     }
21     if (exit) break;
22   }
23 
24   return 0;
25 }

这样的结果就是

1 one + 2 two + 3 five = 2

2.goto

或者用goto语句也可以达到这样的效果:

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5   int x;
 6   int one, two, five;
 7 
 8   scanf("%d", &x);
 9   for ( one = 1; one < x*10; one++) {
10     for (two = 1; two < x*10/2; two++) {
11       for ( five = 1; five < x*10/5; five++) {
12         if (one + two*2 + five*5 == x*10) {
13           printf("%d one + %d two + %d five = %d\n", one, two, five, x);
14           goto out;
15         }
16       } 
17     }
18   }
19   out:
20   return 0;
21 }

goto特别合适这样的场合,跳出多重循环。别的场合使用的时候要慎重。

 

posted @ 2018-02-18 16:49  左揽雀尾007  阅读(113)  评论(0编辑  收藏  举报