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