PROBLEM A 分析 分析 這個題屬於非常基礎的輸出問題,一般來說見到這種題可以直接複製粘貼即可。 講解 講解 沒有什麼詳細說明的直接複製粘貼即可。這樣不容易出錯。 代碼 代碼 點評 點評 很基礎的一道題,主要是熟悉OJ的使用和OJ的出題格式。 PROBLE B PROBLE B 分析 分析 這 ...
PROBLEM A
分析
這個題屬於非常基礎的輸出問題,一般來說見到這種題可以直接複製粘貼即可。
講解
沒有什麼詳細說明的直接複製粘貼即可。這樣不容易出錯。
代碼
#include <stdio.h> int main() { printf("**************************\n"); printf(" Very Good!\n"); printf("**************************\n"); return 0; }
點評
很基礎的一道題,主要是熟悉OJ的使用和OJ的出題格式。
PROBLE B
分析
這個題相比第一題直接輸出來說還多了輸入。需要註意的是樣例不代表程式只有10 20 30.而是其中之一是10 20 30.所有我們要調用scanf來進行輸入。
怎麼求三個數的最大值,其實有很多方法。在這裡我就先介紹一種比較直觀的數學方法了(當然應該不是最簡單的,只是感覺比較好懂罷了)。
假設a,b,c 如果求出a,b的最大值,再求出a,c的最大值,那麼不就是求出了a,b,c的最大值?
講解
*下麵的方法使用了?運算符請大家去翻一下課本如果有什麼不清楚的話,不過也是基礎的語法。這樣可以減少代碼量,當然再後續的學習中,會知道更多的函數來減少這種方法的代碼量,但是這裡不再詳細介紹。
代碼
#include <stdio.h> int main() { int a,b,c; scanf("%d %d %d",&a,&b,&c); int k1=(a>b)?a:b; int k2=(a>c)?a:c; int k3=(k1>k2)?k1:k2; printf("%d",k3); }
點評
對於初學者而言可能不是一道輕鬆的題,但是掌握了這道題的話,說明你已經基本掌握了if的使用方法。
PROBLE C
分析
這個題說實話開始有點技術含量了,不是直接就能上手去做的。這裡用到了迴圈語句,我在此用的是for,因為for對於計步迴圈來說還是比較好用的。這個題的難點在於怎麼去求解2+22+222+…+22…222(n個2)的值的問題。
講解
首先看到這種不斷迴圈相加的情況,首先想到要用迴圈語句。對於上式的求解,其實經過觀察我們可以發現一種方法。他們都是2*1,2*11,2*111的,那麼怎麼去實現這種功能呢,我們需要定義兩個變數r,sum(當然其他的字母也可以,這裡只是習慣上)。每次迴圈把r累積乘10再加1即可即r=r*10+1;用sum來進行計數。即sum+=2*r;到此程式的主要部分講解完畢。
代碼
註意下麵sum初始值=2!!!i從1開始迴圈!!
#include <stdio.h> int main() { int n,r,sum; scanf("%d",&n); r=1;sum=2; for(int i=1;i<n;i++) { r=r*10+1; sum+=2*r; } printf("%d",sum); }
點評
這可能是大家第一次做這種與數學相關的題目。其實我感覺這個題是告訴大家,編程跟數學是密切相關的。
PROBLE D
分析
這個題雖然只有三個數,但是也透露出了一絲絲排序演算法的影子。但是在這裡我就先不准備講解排序的一些演算法(如冒泡排序)了,直接講解硬來的解法。
講解
首先我們得知道交換變數的方法,其中一個就是三變數交換法。我們先定義一個t t=a;a=b;b=t這樣即可交換a和b,為什麼要定義一個t來交換而不是直接交換呢,這些還需要你自己思考。那麼有了這個交換變數的方法,我們就可以實施我們的方法了。我們進行直接硬來的三個if進行交換。例如if(a>b) { int t=a;a=b;b=t} 這樣交換後就是a<=b了,同理還有(a>c) (b>c)兩個,
出自紫書《演算法競賽入門經典》
詳細請看代碼
代碼
#include <stdio.h> int main() { int a,b,c; scanf("%d %d %d",&a,&b,&c); if(a>b) {int t=a;a=b;b=t;} if(a>c) {int t=a;a=c;c=t;} if(b>c) {int t=b;b=c;c=t;} printf("%d %d %d",a,b,c); return 0; }
點評
這個題僅僅是三個數比大小如果是4個5個乃至更多的數呢?建議大家自己去學習一下排序的演算法,推薦冒泡排序。
PROBLE E
分析
這還是一道數學題,題目本身不難解法很多。但是這裡出現了迴圈輸入輸出的問題需要註意。
講解
迴圈輸入輸出的基本做法是用一個while函數來實現。這裡不得不提一下scanf函數的返回值為輸入正確的元素的個數,到EOF結束指的是end of file,文件末尾。因為oj的判捲是文件輸入文件輸出進行數據的匹配來進行判捲的。oj會把你的程式的輸出文本與答案比對如果全部一致那麼恭喜你就是accepted,如果是其他會提示別的情況,再次不詳細說明,看群里文件的入門指南即可。因為要輸入三個值所以需要寫成 while(scanf(“%d %d %d”,&a,&b,&c)==3)
其他的就是判斷三角形的方法,判斷直角三角形的方法,方法很多不再詳細介紹。
詳細請看代碼
代碼
#include <stdio.h> int main() { int a,b,c; while(scanf("%d %d %d",&a,&b,&c)==3) { if(a+b>c&&a+c>b&&b+c>a) { if(a*a+b*b==c*c) printf("yes\n"); else printf("no\n"); } else printf("not a triangle\n"); } return 0; }
如果判斷三角形條件有不熟悉的同學的話,可以看看代碼里的if語句。
點評
這道題的要點我覺得在於迴圈輸入和輸出。題目本身而言並不難,只需要多多註意細節即可。