1. 程式人生 > >NOI題庫答案(1.3 程式設計基礎之算術表示式與順序執行)

NOI題庫答案(1.3 程式設計基礎之算術表示式與順序執行)

01:A+B問題

總時間限制: 1000ms        記憶體限制: 65536kB

描述

在大部分的線上題庫中,都會將A+B問題作為第一題,以幫助新手熟悉平臺的使用方法。

A+B問題的題目描述如下:給定兩個整數A和B,輸出A+B的值。保證A、B及結果均在整型範圍內。

現在請你解決這一問題。

輸入

一行,包含兩個整數A,B,中間用單個空格隔開。A和B均在整型範圍內。

輸出

一個整數,即A+B的值。保證結果在整型範圍內。

樣例輸入

1 2

樣例輸出

3
#include <iostream>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    cout<<a+b; 
    return 0;
}

02:計算(a+b)*c的值

總時間限制: 1000ms        記憶體限制: 65536kB

描述

給定3個整數a、b、c,計算表示式(a+b)*c的值。

輸入

輸入僅一行,包括三個整數a、b、c, 數與數之間以一個空格分開。
(-10,000 < a,b,c < 10,000)

輸出

輸出一行,即表示式的值

樣例輸入

2 3 5

樣例輸出

25
#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    cout<<(a+b)*c; 
    return 0;
}

03:計算(a+b)*c的值

總時間限制: 1000ms        記憶體限制: 65536kB

描述

給定3個整數a、b、c,計算表示式(a+b)/c的值,/是整除運算。

輸入

輸入僅一行,包括三個整數a、b、c, 數與數之間以一個空格分開。(-10,000 < a,b,c < 10,000, c不等於0)

輸出

輸出一行,即表示式的值。

樣例輸入

1 1 3

樣例輸出

0
#include <iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    cout<<(a+b)/c; 
    return 0;
}

04:帶餘除法

總時間限制: 1000ms        記憶體限制: 65536kB

描述

給定被除數和除數,求整數商及餘數。

此題中請使用預設的整除和取餘運算,無需對結果進行任何特殊處理。看看程式執行結果與數學上的定義有什麼不同?

輸入

一行,包含兩個整數,依次為被除數和除數(除數非零),中間用一個空格隔開。

輸出

一行,包含兩個整數,依次為整數商和餘數,中間用一個空格隔開。

樣例輸入

10 3

樣例輸出

3 1
#include <iostream>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    cout<<a/b<<" "<<a%b; 
    return 0;
}

05:計算分數的浮點數值

總時間限制: 1000ms        記憶體限制: 65536kB

描述

兩個整數a和b分別作為分子和分母,既分數 a/b ,求它的浮點數值(雙精度浮點數,保留小數點後9位)

輸入

輸入僅一行,包括兩個整數a和b

輸出

輸出也僅一行,分數 a/b 的浮點數值(雙精度浮點數,保留小數點後9位)

樣例輸入

5 7

樣例輸出

0.714285714

提示

使用printf("%.9lf", ...)實現保留小數點後9位

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    double a,b;
    double c;
    cin>>a>>b;
    c=a/b;
    printf("%.9lf",c);
    return 0;
}

06:甲流疫情死亡率

總時間限制: 1000ms        記憶體限制: 65536kB

描述

甲流並不可怕,在中國,它的死亡率並不是很高。請根據截止2009年12月22日各省報告的甲流確診數和死亡數,計算甲流在各省的死亡率。

輸入

輸入僅一行,有兩個整數,第一個為確診數,第二個為死亡數。

輸出

輸出僅一行,甲流死亡率,以百分數形式輸出,精確到小數點後3位。

樣例輸入

10433 60

樣例輸出

0.575%

提示

輸出%可以使用printf(“%%”);

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
	double a,b;
	double c;
	cin>>a>>b;
	c=100*b/a;
	printf("%.3lf%%",c);
	return 0;
}

07:計算多項式的值

總時間限制: 1000ms        記憶體限制: 65536kB

描述

對於多項式f(x) = ax3 + bx2 + cx + d 和給定的a, b, c, d, x,計算f(x)的值。

輸入

輸入僅一行,包含5個實數,分別是x,及引數a、b、c、d的值,每個數都是絕對值不超過100的雙精度浮點數。數與數之間以一個空格分開。

輸出

輸出一個實數,即f(x)的值,保留到小數點後7位。

樣例輸入

2.31 1.2 2 2 3

樣例輸出

33.0838692
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
	double a,b,c,d,x,p;
	cin>>x>>a>>b>>c>>d;
	p=x*x*x*a+x*x*b+x*c+d;
	printf("%.7lf",p);
	return 0;
}

08:溫度表達轉化

總時間限制: 1000ms         記憶體限制: 65536kB

描述

利用公式 C = 5 * (F-32) / 9 (其中C表示攝氏溫度,F表示華氏溫度) 進行計算轉化。

輸入

輸入一行,包含一個實數f,表示華氏溫度。(f >= -459.67)

輸出

輸出一行,包含一個實數,表示對應的攝氏溫度,要求精確到小數點後5位。

樣例輸入

41

樣例輸出

5.00000

提示

C/C++,使用double

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
	double f,c;
	cin>>f;
	c=5*(f-32)/9;
	printf("%.5lf",c);
	return 0;
}

09:與圓相關的計算

總時間限制: 1000ms         記憶體限制: 65536kB

描述

給出圓的半徑,求圓的直徑、周長和麵積。

輸入

輸入包含一個實數r(0 < r <= 10,000),表示圓的半徑。

輸出

輸出一行,包含三個數,分別表示圓的直徑、周長、面積,數與數之間以一個空格分開,每個數保留小數點後4位。

樣例輸入

3.0

樣例輸出

6.0000 18.8495 28.2743

提示

如果圓的半徑是r,那麼圓的直徑、周長、面積分別是2*r、2 * pi * r、pi * r * r,其中約定pi=3.14159。
可以使用printf("%.4lf", ...)實現保留小數點後4位。

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
	double r,d,s,c,PI=3.14159;
	cin>>r;
	d=2*r;
	s=PI*r*r;
	c=2*PI*r;
	printf("%.4lf ",d);
	printf("%.4lf ",c);
	printf("%.4lf",s);
	return 0;
}

10:計算並聯電阻的阻值

總時間限制: 1000ms        記憶體限制: 65536kB

描述

對於阻值為r1和r2的電阻,其並聯電阻阻值公式計算如下:

R = 1/(1/r1 + 1/r2)

輸入

兩個電阻阻抗大小,浮點型,以一個空格分開。

輸出

並聯之後的阻抗大小,結果保留小數點後2位

樣例輸入

1 2

樣例輸出

0.67

提示

計算過程使用float型別

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
	float a,b,r;
	cin>>a>>b;
	r=1/(1/a+1/b);
	printf("%.2lf",r);
	return 0;
}

11:計算浮點數相除的餘數

總時間限制: 1000ms        記憶體限制: 65536kB

描述

計算兩個雙精度浮點數a和b的相除的餘數,a和b都是正數的。這裡餘數(r)的定義是:a = k * b + r,其中 k是整數, 0 <= r < b。

輸入

輸入僅一行,包括兩個雙精度浮點數a和b。

輸出

輸出也僅一行,a÷b的餘數

樣例輸入

73.263 0.9973

樣例輸出

0.4601

提示

注意:輸出時小數尾部沒有多餘的0,可以用下面這種格式:
double x;
x = 1.33;
printf("%g", x);

#include <iostream>
using namespace std;
int main()
{
	double a,b,r;
	int k;
	cin>>a>>b;
	k=a/b;
	r=a-k*b;
	cout<<r;
	return 0;
}

12:計算球的體積

總時間限制: 1000ms        記憶體限制: 65536kB

描述

對於半徑為r的球,其體積的計算公式為V=4/3*πr3,這裡取π= 3.14。

現給定r,求V。

輸入

輸入為一個不超過100的非負實數,即球半徑,型別為double。

輸出

輸出一個實數,即球的體積,保留到小數點後2位。

樣例輸入

4

樣例輸出

267.95
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
	double r,v,PI=3.14,a;
	cin>>r;
	a=4.0/3;
	v=a*PI*r*r*r;
	printf("%.2lf",v);
	return 0;
}

13:反向輸出一個三位數

總時間限制: 1000ms        記憶體限制: 65536kB

描述

將一個三位數反向輸出。

輸入

一個三位數n。

輸出

反向輸出n。

樣例輸入

100

樣例輸出

001
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
	int x,a,b,c;
	cin>>x;
	a=x/100;
	b=(x-a*100)/10;
	c=x-a*100-b*10;
	cout<<c<<b<<a;
	return 0;
}

14:大象喝水

總時間限制: 1000ms        記憶體限制: 65536kB

描述

一隻大象口渴了,要喝20升水才能解渴,但現在只有一個深h釐米,底面半徑為r釐米的小圓桶(h和r都是整數)。問大象至少要喝多少桶水才會解渴。

輸入

輸入有一行:包行兩個整數,以一個空格分開,分別表示小圓桶的深h和底面半徑r,單位都是釐米。

輸出

輸出一行,包含一個整數,表示大象至少要喝水的桶數。

樣例輸入

23 11

樣例輸出

3

提示

如果一個圓桶的深為h釐米,底面半徑為r釐米,那麼它最多能裝Pi * r * r * h立方厘米的水。(設Pi=3.14159) 
1升 = 1000毫升
1毫升 = 1 立方厘米

#include <iostream>
using namespace std;
int main()
{
    int h,r,a,b,v=20000;
    double pi=3.14159;
    cin>>h>>r;
    a=v/(pi*r*r*h);
    b=(int)a+1;
    cout<<b<<endl;
    return 0;
}

15:蘋果和蟲子

總時間限制: 1000ms          記憶體限制:  65536kB

描述

你買了一箱n個蘋果,很不幸的是買完時箱子裡混進了一條蟲子。蟲子每x小時能吃掉一個蘋果,假設蟲子在吃完一個蘋果之前不會吃另一個,那麼經過y小時你還有多少個完整的蘋果?

輸入

輸入僅一行,包括n,x和y(均為整數)。輸入資料保證y <= n * x。

輸出

輸出也僅一行,剩下的蘋果個數

樣例輸入

10 4 9

樣例輸出

7

提示

注意:是要求完整的蘋果數。

#include <iostream>
using namespace std;
int main()
{
	int n,x,y,p;
	cin>>n>>x>>y;
	if(y%x==0)
		p=n-y/x;
	else
		p=n-y/x-1;
	cout<<p;
	return 0;
}

16:計算線段長度

總時間限制: 1000ms        記憶體限制: 65536kB

描述

已知線段的兩個端點的座標A(Xa,Ya),B(Xb,Yb),求線段AB的長度。

輸入

共兩行。
第一行是兩個實數Xa,Ya,即A的座標。
第二行是兩個實數Xb,Yb,即B的座標。
輸入中所有實數的絕對值均不超過10000。

輸出

一個實數,即線段AB的長度,保留到小數點後3位。

樣例輸入

1 1
2 2

樣例輸出

1.414
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
	double x1,y1,x2,y2,p;
	cin>>x1>>y1>>x2>>y2;
	p=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
	printf("%.3lf",p);
	return 0;
}

17:計算三角形面積

總時間限制: 1000ms         記憶體限制: 65536kB

描述

平面上有一個三角形,它的三個頂點座標分別為(x1, y1), (x2, y2), (x3, y3),那麼請問這個三角形的面積是多少。

輸入

輸入僅一行,包括6個單精度浮點數,分別對應x1, y1, x2, y2, x3, y3。

輸出

輸出也是一行,輸出三角形的面積,精確到小數點後兩位。

樣例輸入

0 0 4 0 0 3

樣例輸出

6.00

提示

海倫公式

#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;
int main()
{
	float x1,y1,x2,y2,x3,y3;
	float s,p,a,b,c,x,y,z;
	cin>>x1>>y1>>x2>>y2>>x3>>y3;
	x=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
	y=(x3-x1)*(x3-x1)+(y3-y1)*(y3-y1);
	z=(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2);
	a=sqrt(x);
	b=sqrt(y);
	c=sqrt(z);
	p=(a+b+c)/2; 
	s=sqrt(p*(p-a)*(p-b)*(p-c));
	printf("%.2lf",s);
	return 0;
}


//sqrt()函式需要用到<math.h>標頭檔案

18:等差數列末項計算

總時間限制: 1000ms        記憶體限制: 65536kB

描述

給出一個等差數列的前兩項a1,a2,求第n項是多少。

輸入

一行,包含三個整數a1,a​2,n。-100 <= a1,a​2 <= 100,0 < n <= 1000。

輸出

一個整數,即第n項的值。

樣例輸入

1 4 100

樣例輸出

298
#include <iostream>
using namespace std;
int main()
{
	int n,a1,a2,an,d;
	cin>>a1>>a2>>n;
	d=a2-a1;
	an=a1+(n-1)*d;
	cout<<an;
	return 0;
}

19:A*B問題

總時間限制: 1000ms         記憶體限制: 65536kB

描述

輸入兩個正整數A和B,求A*B。

輸入

一行,包含兩個正整數A和B,中間用單個空格隔開。1 <= A,B <= 50000。

輸出

一個整數,即A*B的值。

樣例輸入

3 4

樣例輸出

12

提示

注意乘積的範圍和資料型別的選擇

#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
    long long a,b,c;
    scanf("%lld%lld",&a,&b);
    c=a*b;
    printf("%lld",c);
    return 0;
}

20:計算2的冪

總時間限制: 1000ms        記憶體限制: 65536kB

描述

給定非負整數n,求2n。

輸入

一個整數n。0 <= n < 31。

輸出

一個整數,即2的n次方。

樣例輸入

3

樣例輸出

8
#include <iostream>
using namespace std;
int main()
{
	int n,i,j=1;
	cin>>n;
	for(i=1;i<=n;i++)
		j=j*2;
	cout<<j;
	return 0;
}

以上即為NOI 1.3部分的所有題目,歡迎指正!