コンピューター20-7、8プログラミングの基本的な実践1

Problem_A_共通の倍数を判断する

説明
正の整数を入力し、それが2と3の共通の倍数であるかどうかを判断します。はいの場合は「はい」を出力し、そうでない場合は「いいえ」を出力します
。——————————————
入力
正の整数を入力します
—————— ————————
出力
はいまたはいいえ
——————————————
サンプル入力
6
5
——————————————
サンプル出力
はい
いいえ

思考の分析:この
質問は、質問の意味に直接応じることができます。数値を入力すると、2と3の残りをとった後、ゼロかどうかを判断できます。両方がゼロの場合は「はい」を出力し、そうでない場合は「いいえ」を出力します。

#include<cstdio>
using namespace std;
int main()
{
    
    
	int n;
	while(~scanf("%d",&n))
	{
    
    
		if(n%3==0 && n%2==0)
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}

Problem_B_には3の整数が含まれています

説明
2つの正の整数aとb(a <b)が与えられた場合、aとbの間の3つの数値すべての合計を計算します。例:2 15. 3を含む数値は3と13であるため、このデータグループの合計は16です。
——————————————
入力
2つの正の整数
———————————————
出力
条件を満たすデータ合計
—————————— ————
サンプル入力
2 15
10 24
——————————————
サンプル出力
16
36

アイデアの分析:
特定の間隔ですべての数値を列挙し、各数値のすべての桁を1回判断するだけで済みます。数値が特定の桁で3と表示される場合は、この数値をansに追加するだけで済みます。内部では
、最終的にansの値を出力できます

#include<cstdio>
using namespace std;

bool check(int x)
{
    
    
	int temp;
	while(x)
	{
    
    
		temp=x%10;
		if(temp==3)	return true;
		x/=10;
	}
	return false;
}

int main()
{
    
    
	int l,r;
	while(~scanf("%d%d",&l,&r))
	{
    
    
		int ans=0;
		for(int i=l;i<=r;i++)
			if(check(i))
				ans+=i;
		printf("%d\n",ans);
	}
}

Problem_C_Commondivisorとcommonmultiple

説明
2つの正の整数と最大共通除数の最小共通倍数
--------------
入力
入力2つの整数
--------------
出力
出力除数共通の倍数の合計
——————————————
サンプル入力
2 3
21 9
——————————————
サンプル出力
1
6
3
63

思考の分析:
この質問の難しさは、2つのgcd(最も一般的でない要因、
知らないBaidu)を見つけることです。gcdを計算した後、最も一般的でない倍数がa * b / gcdである
ことを簡単に証明できるのでこのコードがあります。

#include<cstdio>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;

int gcd(int a,int b)
{
    
    
	if(a%b==0)
		return b;
	return gcd(b,a%b);
}

int main()
{
    
    
	int a,b;
	while(~scanf("%d%d",&a,&b))
	{
    
    
		int Gcd=gcd(max(a,b),min(a,b));
		printf("%d\n%d\n",Gcd,a*b/Gcd);
	}
}

Problem_D_1年のどの日を決定する

説明
特定の日、特定の月、および特定の日を入力して、その年の日を決定しますか?
——————————————
入力
入力日付
——————————————
出力
出力は1年の日です
———————— ——————
サンプル入力
2010 1 6
2012 3 2
——————————————
サンプル出力
6
62

思考分析:
これも水問題です。まず
2月の日数直接影響するため、飛躍年が最初に判断されることを明確にする必要があります。2月の日数を知った後、今月より前のサイクルを使用する必要があります。その月の日数を合計し(これが完了する前の各月を意味する必要があります)、次にその月の日数を追加して最終的な回答を取得します

#include<cstdio>
using namespace std;
int mon[15]={
    
    0,31,0,31,30,31,30,31,31,30,31,30,31};

bool isr(int Y)
{
    
    
	if((Y%4==0 && Y%100!=0) || Y%400==0)
		return true;
	else	return false;
}

int main()
{
    
    
	int y,m,d;
	while(~scanf("%d%d%d",&y,&m,&d))
	{
    
    
		int cnt=0;
		
		if(isr(y))	mon[2]=29;
		else		mon[2]=28;
		
		for(int i=1;i<m;i++)
			cnt+=mon[i];
		cnt+=d;
		printf("%d\n",cnt);
	}
	return 0;
}

Problem_E_三角形の面積の計算

説明
は、三角形の3つの辺を示し、その面積を計算します
————————————
入力
三角形の3つの辺の長さ(単一精度)
——————————————
出力
三角形の面積(小数点以下2桁)
——————————————
サンプル入力
3 4 5
2 6 6
3.5 7.83 6.178
——————————————
サンプル出力
6.00
5.92
10.46

思考分析:
三角形の3辺の長さがあるため、この質問はさらに水っぽくなります。したがって、答えは直接ヘレンの公式です(小数点以下3桁が保持されることに注意してください)。

#include<cmath>
#include<cstdio>
using namespace std;

int main()
{
    
    
	double a,b,c,p;
	while(~scanf("%lf%lf%lf",&a,&b,&c))
	{
    
    
		p=(a+b+c)/2;
		printf("%.2f\n",sqrt(p*(p-a)*(p-b)*(p-c)));
	}
	return 0;
}

おすすめ

転載: blog.csdn.net/Holo__/article/details/109448112