1. 程式人生 > >程式設計菜鳥到大佬之路:C語言程式(八)

程式設計菜鳥到大佬之路:C語言程式(八)

第八天學習精要

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;
}