21.11.29

目录

1.金中的蛋糕裱花

2.求两数的最小公倍数

3.最短距离的点

4.粘墙“三角形”

5. 洛谷 P5719 【深基4.例3】分类平均

1.金中的蛋糕裱花

oj(循环)12

输入

一个整数,n>0。

输出

由n*2-1层“*”号组成的空心菱形。

样例输入

5

样例输出

    *
   * *
  *   *
 *     *
*       *
 *     *
  *   *
   * *
    *

 代码来源:

输入一些正整数(≤26),编程输出以这些正整数为边长的附着墙而立的字母三角形。_C_Dreamy的博客-CSDN博客https://blog.csdn.net/C_Dreamy/article/details/105214479

#include<iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    for (int i = 1; i <= 2 * n - 1; i++){
        if (i <= n){
            for (int j = 1; j <= 2 * n - 1; j++){
                if (j == n - i + 1 || j == n + i - 1)cout << "*";
                else cout << " ";
            }
            cout << endl;
        }
        else{
            for (int g = 1; g <= 2 * n - 1; g++){
                if (g == i - n + 1 || g == 3 * n - 1 - i)cout << "*";
                else cout << " ";
            }
            cout << endl;
        }
    }
    return 0;
}

2.求两数的最小公倍数

oj(循环)13

描述

求两个正整数的最小公倍数。

(0<n<10000,0<m<10000)

输入

一行,两个整数n和m,中间用一个空格隔开。

输出

一个整数,即n和m的最小公倍数。

样例输入

4 3

样例输出

12

思路

两数之积除以两数最大公因数

最大公约数求法

辗转相除法(m,n最大公约数)_ppddcsz-CSDN博客https://blog.csdn.net/weixin_60178940/article/details/121600205?spm=1001.2014.3001.5501

#include<iostream>
using namespace std;
int main() {
	int n, m, temp, a, b;
	cin >> n >> m;
	a = n;
	b = m;
	if (n < m) {
		temp = n; n = m; m = temp;
	}
	while (m) {
		temp = m;
		m =n%m;
		n = temp;
	}
	temp = a * b / n;
	cout << temp << endl;
	return 0;
}

3.最短距离的点

oj(循环)14

描述

给出一些整数对,它们表示一些平面上的坐标点,给定一个点,求所有那些点到该点最短距离的点。结构为:第一个整数对为所给定的点,后面的整数对为所有其他的点。

输入

第一个整数对为所给定的点,后面的整数对为所有其他的点。

输出

到第一个点最短距离的点

样例输入

9 2
1 0
1 1
0 0
1 2
2 1

样例输出

2 1

#include<iostream>
#include<cmath>
using namespace std;
int main() {
	int n, m,a,b,x,y;
	double l,min;
	cin >> n >> m>>a >> b;
	l = sqrt((n - a)*(n - a) + (m - b) * (m - b));
	min = l;
	x = a;
	y = b;
	while (cin >> a >> b) {
		l = sqrt((n-a)*(n-a) + (m-b)*(m-b));
		if (min >= l) {
			x = a;
			y = b;
			min = l;
		}
	}
	cout << x << ' ' << y << endl;
	return 0;
}

4.粘墙“三角形”

描述

输入一些正整数(≤26),编程输出以这些正整数为边长的附着墙而立的字母三角形。

输入

几个正整数

输出

每个正整数对应的图案。每组图案之间空一行。

样例输入

3
7

样例输出

a  a
a ab
aabc

a      a
a     ab
a    abc
a   abcd
a  abcde
a abcdef
aabcdefg

#include<iostream>
using namespace std;
int main() {
	int n;
	char c, b = 'a';
	c = b;
	while (cin>>n)
		for (int i = 1; i <= n; i++) {
			b = c;
			for (int k = 1; k <= n; k++) {
				if (k == 1)
					cout << b;
				if (k > n - i) {
					cout << b;
					b++;
				}
				else
					cout << ' ';
				
			}
			cout << endl;
			if (i == n)            //小心"Presentation Error"
				cout << endl;
		}
	return 0;
}

5. 洛谷 P5719 【深基4.例3】分类平均

题目描述

给定 n(n\le10000)n(n≤10000) 和 k(k\le 100)k(k≤100),将从 1 到 nn 之间的所有正整数可以分为两类:A 类数可以被 kk 整除(也就是说是 kk 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 1 位,用空格隔开。

数据保证两类数的个数都不会是 0。

输入格式

输出格式

输入输出样例

100 16

 56.0 50.1

 原代码:

#include<iostream>
#include<iomanip>
using namespace std;
int main() {
	double n,s1=0,s2=0,g1=0,g2=0;
	int k;
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		if (!(i % k)) {
			s1 += i;
			g1++;
		}
		else {
			s2 += i;
			g2++;
		}
	}
	cout <<fixed<<setprecision(1)<< s1/g1 << ' ' << s2/g2 << endl;
	return 0;
}

改进:

1~n的前n项和:(n+1)*n/2

A类数是都是k倍的数

A类数的个数为:n/k

#include<iostream>
#include<iomanip>
using namespace std;
int main() {
	int n, k, Asum = 0, Bsum = 0;
	cin >> n >> k;
	for (int i = k; i <= n; i+=k)                //k倍
		Asum += i;
	Bsum = (1 + n) * n / 2 - Asum;
	cout <<fixed<<setprecision(1)<< (double)Asum/(n/k)
		<< ' ' << double(Bsum)/(n-n/k) << endl;
	return 0;
}

还可以直接用等差数列求Asum

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值