生活随笔
收集整理的這篇文章主要介紹了
算法竞赛入门经典(第二版)答案——第一部分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?第一章程序設計入門
/輸入三個平均數,輸出他們的平均值,保留三位小數/
# include <stdio.h>
int main ( )
{ double a
, b
, c
; scanf ( "%lf%lf%lf" , & a
, & b
, & c
) ; printf ( "%.3lf" , ( a
+ b
+ c
) / 3 ) ; return 0 ;
}
/輸入華氏溫度f,輸出對應的攝氏溫度從,保留三位小數。提示 c= 5(f-32)/9/
# include <stdio.h>
int main ( )
{ double c
, f
; scanf ( "%lf" , & f
) ; c
= 5 * ( f
- 32 ) / 9 ; printf ( "%.3lf" , c
) ; return 0 ;
}
3./輸入正整數n,輸出1+2+3+…n的值,提示:目標使解決問題,而不是練習編程*/
# include <stdio.h>
int main ( ) { int n
; scanf ( "%d" , & n
) ; printf ( "%d" , ( n
+ 1 ) * n
/ 2 ) ; return 0 ;
}
# include <stdio.h>
int main ( )
{ int sum
, i
, n
; scanf ( "%d" , & n
) ; for ( i
= 1 ; i
<= n
; i
++ ) sum
= sum
+ i
; printf ( "%d\n" , sum
) ; return 0 ;
}
/輸入正整數n(0~360),輸出入n度的正弦函數值。提示使用數學函數/
# include <stdio.h>
# include <math.h>
# define pi acos ( - 1.0 )
int main ( )
{ int x
; scanf ( "%d" , & x
) ; printf ( "%.3lf\n" , sin ( 1.0 * pi
* x
/ 180 ) ) ; printf ( "%.3lf\n" , cos ( 1.0 * pi
* x
/ 180 ) ) ; return 0 ;
}
一件衣服95元,若消費滿300元,可以打85折。輸入購買的衣服的數量,,輸出索要交付的的金額,保留兩位小數
# include <stdio.h>
int main ( )
{ int n
; scanf ( "%d" , & n
) ; printf ( "%.2lf" , 95 * n
>= 300 ? 95.0 * n
* 0.85 : 95 * n
) ; return 0 ;
}
# include <stdio.h>
int main ( )
{ const double price
= 95.00 ; int n
; scanf ( "%d" , & n
) ; if ( price
* n
< 300 ) printf ( "%.2f" , price
* n
) ; else printf ( "%.2lf" , price
* n
* 0.85 ) ; return 0 ;
}
輸入三角形3跳變的長度值(均為正整數),判斷是否能為直角三角形的三條邊長。如果可以則輸出yes,如果不能就輸出no。如果根本無法構成三角形,則輸出not a triangle
# include <stdio.h>
int main ( )
{ int a
, b
, c
; scanf ( "%d%d%d" , & a
, & b
, & c
) ; if ( a
<= 0 || b
<= 0 || c
<= 0 || a
+ b
<= c
|| a
+ c
<= b
|| b
+ c
<= a
) printf ( "NOT A TRIANGLE!" ) ; else if ( a
+ b
> c
&& a
+ c
> b
&& b
+ c
> a
) { if ( a
* a
+ b
* b
== c
* c
|| a
* a
+ c
* c
== b
* b
|| b
* b
+ c
* c
== a
* a
) printf ( "yes!" ) ; else printf ( "no!" ) ; } return 0 ;
}
輸入年份,判斷是否為閏年。如果是,則輸出yes,否則輸出no 提示簡單的判斷除以4的余數是不夠的
# include <stdio.h>
int main ( )
{ int year
; scanf ( "%d" , & year
) ; if ( year
% 4 != 0 ) printf ( "no!\n" ) ; else if ( year
% 100 == 0 && year
% 400 != 0 ) printf ( "no!\n" ) ; else printf ( "yes!\n" ) ; return 0 ;
}
# include <stdio.h> int main ( )
{ int year
; scanf ( "%d" , & year
) ; puts ( year
% 400 == 0 || year
% 100 != 0 && year
% 4 == 0 ? "yes!" : "no!" ) ; return 0 ;
}
第二章 循環結構設計
1.水仙花數 輸出100~999中的所有水仙花數。若3位數ABC滿足ABC=A3 +B3 +C3 ,則稱其為水仙花數。例如153=13 +53 +33 ,所以153是水仙花數。
# include <stdio.h>
int main ( void )
{ for ( int i
= 100 ; i
<= 999 ; i
++ ) { int a
= i
/ 100 ; int c
= i
% 10 ; int b
= ( i
- a
* 100 - c
) / 10 ; if ( i
== a
* a
* a
+ b
* b
* b
+ c
* c
* c
) printf ( "%d\n" , i
) ; } return 0 ;
}
2. 韓信點兵 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先后以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入包含多組數據,每組數據包含3個非負整數a,b,c,表示每種隊形排尾的人數(a<3,b<5,c<7),輸出總人數的最小值(或報告無解)。已知總人數不小于10,不超過100。輸入到文件結束為止。
樣例輸入:
2 1 6
2 1 3
樣例輸出:
Case 1: 41
Case 2: No answer
# include <stdio.h>
int main ( void )
{ int a
, b
, c
, i
; scanf ( "%d%d%d" , & a
, & b
, & c
) ; for ( i
= 10 ; i
<= 100 ; i
++ ) { if ( i
% 3 == a
&& i
% 5 == b
&& i
% 7 == c
) { printf ( "Case 1:%d\n" , i
) ; break ; } } if ( i
> 100 ) printf ( "Case 2: No answer" ) ; return 0 ;
}
倒三角形(triangle) 輸入正整數n≤20,輸出一個n層的倒三角形。例如,n=5時輸出如下:
#########################
# include <stdio.h>
int main ( void )
{ int i
; scanf ( "%d" , & i
) ; for ( int j
= 0 ; j
< i
; j
++ ) { for ( int k
= 0 ; k
< j
; k
++ ) printf ( " " ) ; for ( int k
= 0 ; k
< 2 * i
- 2 * j
- 1 ; k
++ ) printf ( "#" ) ; printf ( "\n" ) ; } return 0 ;
}
2.4 子序列的和(subsequence)
輸入兩個正整數n<m<10^6 ,輸出 1/n^2 + 1/(n+1)^2 +1/m^2,保留5位小數。輸入包含多組數據,結束標記為n=m=0。提示:本題有陷阱。
樣例輸入:
2 4
65536 655360
0 0
樣例輸出:
Case 1: 0.42361
Case 2: 0.0000
# include <stdio.h>
int main ( ) { int n
, m
; while ( scanf ( "%d%d" , & n
, & m
) && n
) { double sum
= 0 ; while ( n
<= m
) { sum
+= 1.0 / n
/ n
; ++ n
; } printf ( "%.5lf\n" , sum
) ; } return 0 ;
}
5. 分數化小數(decimal)
輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點后c位。a,b≤106 ,c≤100。輸入包含多組數據,結束標記為a=b=c=0。
樣例輸入:
1 6 4
0 0 0
樣例輸出:
Case 1: 0.1667
# include <stdio.h>
int main ( void )
{ int a
, b
, c
, count
= 0 ; while ( scanf ( "%d%d%d" , & a
, & b
, & c
) && ( b
!= 0 || c
!= 0 || a
!= 0 ) ) { count
++ ; printf ( "Case%d:%.*f\n" , count
, c
, ( double ) a
/ b
) ; } return 0 ;
}
6.排列(permutation) 用1,2,3,…,9組成3個三位數abc,def和ghi,每個數字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式輸出所有解,每行一個解。提示:不必太動腦筋。
**下面是一些思考題。 題目1。假設需要輸出2,4,6,8,…,2n,每個一行,能不能通過對程序2-1進行小小的改動來實現呢?為了方便,現把程序復制如下: **
1 #include<stdio.h>
2 int main()
3 {
4 int n;
5 scanf("%d", &n);
6 for(int i = 1; i <= n; i++)
7 printf("%d\n", i);
8 return 0;
9 }
** 任務1:修改第7行,不修改第6行。
for(int i = 2; i<=2*n;i=i+2)
任務2:修改第6行,不修改第7行。
printf("%d\n",i+i);
題目2。下面的程序運行結果是什么?“!=”運算符表示“不相等”。提示:請上機實 驗,不要憑主觀感覺回答。**
# include <stdio.h>
int main ( )
{ double i
; for ( i
= 0 ; i
!= 10 ; i
+= 0.1 ) printf ( "%.1f\n" , i
) ; return 0 ;
}
會永遠持續打印下去,為什么?因為整數和浮點數的存儲方式不一樣,所以不會相同。
總結
以上是生活随笔 為你收集整理的算法竞赛入门经典(第二版)答案——第一部分 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。