程式設計菜鳥到大佬之路:C語言程式(八)
阿新 • • 發佈:2018-12-13
第八天學習精要
break語句和continue語句
break語句
-
可以出現在迴圈體中(for、 while、 do…while迴圈均可),其作用是跳出迴圈。
-
在多重迴圈的情況下,break語句只能跳出直接包含它的那一重迴圈。
-
例題:如果兩個不同的正整數,他們的和是他們的積的因子,就稱這兩個數為兄弟數,小的稱為弟數,大的稱為兄數。先後輸入正整數n和m(n < m),請在n至m這m-n+1個數中,找出一對兄弟數。如果找不到,就輸出“NoSolution.”。如果能找到,就找出和最小的那一對;如果有多對兄弟數和相同且都是最小,就找出弟數最小的那一對。
- 思路:列舉每一對不同的數,看看是不是兄弟數。用兩個變數記錄當前已經找到的最佳兄弟數,如果發現更佳的,就重新記錄。
# include <iostream> using namespace std; int main() { int n, m; cin >> n >> m; if (n >= m) cout << "輸入不合法" << endl; // a,b記錄已經找到的最佳兄弟數,a是弟數,b是兄數 int a = m + 1, b = m + 1; for (int i = n; i < m; ++i) // 取弟數,共m-n種取法 { if (i > (a + b) / 2 + 1) { break; // 跳出外重迴圈 } for (int j = i + 1; j <= m; ++j) // 取兄數 { if ((i + j) > (a + b)) { break; // 跳出內重迴圈 } if ((i * j) % (i + j) == 0) // 發現兄弟數 { if ((i + j) < (a + b)) // 發現和更小的兄弟數 { a = i; // 更新已找到的最佳兄弟數 b = j; } else if((i + j) == (a + b) && i < a) // 發現和相同但弟數更小的兄弟數 { a = i; // 更新已找到的最佳兄弟數 b = j; } } } } if (a == m + 1) // 沒找到兄弟數 { cout << "No solution."; } else { cout << a << "," << b; } return 0; }
continue語句
-
可以出現在迴圈體中(for、 while、 do…while迴圈均可),其作用是立即結束本次迴圈,並回到迴圈開頭判斷是否要進行下一次迴圈。
-
在多重迴圈的情況下,continue只對直接包含它的那重迴圈起作用。
OJ程式設計題輸入資料的處理
scanf表示式的值
- scanf(…)表示式的值為int,表示成功讀入的變數個數。
int n, m;
printf("%d", scanf("%d%d", &n, &m));
- scanf(…) 值為EOF(即-1)則說明輸入資料已經結束。
/* Windows系統下,不停輸入兩個整數再敲回車,則不停輸出它們的和, 直到輸入 Ctrl+Z 然後 回車, 程式結束。*/ int n,m; while(scanf("%d%d",&n,&m) != EOF) { //EOF是直接能拿來用的符號常量 printf("%d",n+m); }
cin表示式的值
- cin >> m >> n … 表示式的值,在成功讀入所有變數時為true,否則為false。
/* 不停輸入兩個整數再敲回車,則不停輸出它們的和,
直到輸入Ctrl+Z 然後回車,程式結束。 */
int n,m;
while(cin >> n >> m ) {
printf("%d",n+m);
}
- 處理無結束標記的OJ題目輸入
- 輸入若干個(不知道多少個)正整數,輸出其中的最大值
- Sample Input:2 3 4 5 6 787 54532 12
- Sample Output:54532
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n, mx = 0;
while( cin >> n) // 也可以用while(scanf("%d", &n) != EOF)
{
if( n > mx )
mx = n;
}
printf("%d",mx);
return 0;
}