2025-4-16-C++ 学习 循环结构(4)

文章目录

  • 2025-4-16-C++ 学习 循环结构(4)
  • P1075 [NOIP 2012 普及组] 质因数分解
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 说明/提示
    • 题解代码
  • P5725 【深基4.习8】求三角形
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 题解代码
  • P5726 【深基4.习9】打分
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 说明/提示
    • 题解代码
  • P4956 [COCI 2017/2018 #6] Davor
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 输入输出样例 #2
      • 输入 #2
      • 输出 #2
    • 输入输出样例 #3
      • 输入 #3
      • 输出 #3
    • 题解代码
  • P1089 [NOIP 2004 提高组] 津津的储蓄计划
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 输入输出样例 #2
      • 输入 #2
      • 输出 #2
    • 题解代码

2025-4-16-C++ 学习 循环结构(4)

  循环结构,最后一部分。

P1075 [NOIP 2012 普及组] 质因数分解

题目描述

已知正整数 n n n 是两个不同的质数的乘积,试求出两者中较大的那个质数。

输入格式

输入一个正整数 n n n

输出格式

输出一个正整数 p p p,即较大的那个质数。

输入输出样例 #1

输入 #1

21

输出 #1

7

说明/提示

1 ≤ n ≤ 2 × 1 0 9 1 \le n\le 2\times 10^9 1n2×109

题解代码

#include 
using namespace std;

// 唯一分解定理:一个数能且只能分解为一组质数的乘积。

int main()
{
    int n;
    cin >> n;
    int ans;
    for(int k1=2;k1<sqrt(n);++k1)
        {
            if(n % k1 == 0)
            {
                ans = n / k1;
                break;
            }
        }
    cout << ans << endl;
    return 0;
}

P5725 【深基4.习8】求三角形

题目描述

模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。

输入格式

输入矩阵的规模,不超过 9 9 9

输出格式

输出矩形和正方形

输入输出样例 #1

输入 #1

4

输出 #1

01020304
05060708
09101112
13141516

      01
    0203
  040506
07080910

题解代码

#include 
using namespace std;

int main()
{
    int n;
    cin >> n;
    int idx = 1;
    for(int k1=0;k1<n;++k1)
        {
            for(int k2=0;k2<n;++k2)
                {
                    if(idx < 10)
                    {
                        cout << "0" << idx;
                    }
                    else 
                    {
                        cout << idx;
                    }
                    idx++;
                }
            cout << endl;
        }
    cout << endl;
    idx = 1;
    for(int k1=0;k1<n;++k1)
        {
            for(int k2=0;k2<n-(k1+1);++k2)
                {
                    cout << "  ";
                }
            for(int k2=0;k2<k1+1;++k2)
                {
                    if(idx < 10)
                    {
                        cout << "0" << idx;
                    }
                    else 
                    {
                        cout << idx;
                    }
                    idx++;
                }
            cout << endl;
        }
    
    return 0;
}

P5726 【深基4.习9】打分

题目描述

现在有 n ( n ≤ 1000 ) n(n \le 1000) n(n1000) 位评委给选手打分,分值从 0 0 0 10 10 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 2 2 位小数。

输入格式

第一行输入一个正整数 n n n,表示有 n n n 个评委。

第二行输入 n n n 个正整数,第 i i i 个正整数表示第 i i i 个评委打出的分值。

输出格式

输出一行一个两位小数,表示选手的最后得分。

输入输出样例 #1

输入 #1

5
9 5 6 8 9

输出 #1

7.67

说明/提示

数据保证, 3 ≤ n ≤ 1000 3 \leq n \leq 1000 3n1000,每个评委打出的分值为为 0 0 0 10 10 10(含 0 0 0 10 10 10)之间的整数。

题解代码

#include 
using namespace std;

int main()
{
    int n;
    int a;
    cin >> n;
    int n_mx,n_mi,n_sum = 0;
    for(int k1=0;k1<n;++k1)
        {
            cin >> a;
            if(k1 == 0) 
            {
                n_mx = n_mi = a;
            }
            else
            {
                if(a > n_mx) n_mx = a;
                if(a < n_mi) n_mi = a;
            }
            n_sum += a;
        }
    cout << fixed << setprecision(2) << (double)(n_sum - n_mi - n_mx)/(n-2.0)<<endl;
    return 0;
}

P4956 [COCI 2017/2018 #6] Davor

题目描述

成功征服南极后,Davor 正在为新的挑战做准备。接下来是前往西伯利亚、格陵兰和挪威的北极探险。他将于 2018 年 12 月 31 日开始旅行,并需要在此之前筹集 N 库纳(克罗地亚货币)。为此,他决定每周一存入 X(X ≤ 100)库纳到他的旅行基金中,每周二存入 X + K 库纳,每周三存入 X + 2K 库纳,依此类推,直到周日,他将存入 X + 6K 库纳。这样,他将在 52 周内筹集资金,从 2018 年 1 月 1 日(星期一)开始,直到 2018 年 12 月 30 日(星期日)为止。

如果我们知道金额 N,输出值 X 和 K,以便可以在给定的时间范围内收集到准确的金额。解决方案总是存在的,如果有多个,输出 X 最大且 K 最小的那个。

输入格式

输入的第一行包含整数 N(1456 ≤ N ≤ 145600),这是任务中的数字。

输出格式

输出的第一行必须包含 X 的值(0 < X ≤ 100),第二行包含 K 的值(K > 0)。

输入输出样例 #1

输入 #1

1456

输出 #1

1
1

输入输出样例 #2

输入 #2

6188

输出 #2

14
1

输入输出样例 #3

输入 #3

40404

输出 #3

99
4

题解代码

#include 
using namespace std;

int main()
{
    int N;
    cin >> N;
    int ans;
    for(int k1=100;k1>0;--k1)
        {
            int tmp = N/52;
            if((tmp - 7*k1) > 0 && (tmp - 7*k1)%21 == 0)
            {
                ans = k1;      
                break;
            }
        }
    cout << ans << endl << (N/52 - 7*ans)/21 << endl;
    return 0;
}

P1089 [NOIP 2004 提高组] 津津的储蓄计划

题目描述

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 300 300 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20 % 20\% 20% 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 100 100 100 元或恰好 100 100 100 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如 11 11 11月初津津手中还有 83 83 83 元,妈妈给了津津 300 300 300 元。津津预计 11 11 11月的花销是 180 180 180 元,那么她就会在妈妈那里存 200 200 200 元,自己留下 183 183 183 元。到了 11 11 11 月月末,津津手中会剩下 3 3 3 元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据 2004 2004 2004 1 1 1 月到 12 12 12 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 2004 2004 2004 年年末,妈妈将津津平常存的钱加上 20 % 20\% 20% 还给津津之后,津津手中会有多少钱。

输入格式

12 12 12 行数据,每行包含一个小于 350 350 350 的非负整数,分别表示 1 1 1 月到 12 12 12 月津津的预算。

输出格式

一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出 − X -X X X X X 表示出现这种情况的第一个月;否则输出到 2004 2004 2004 年年末津津手中会有多少钱。

注意,洛谷不需要进行文件输入输出,而是标准输入输出。

输入输出样例 #1

输入 #1

290
230
280
200
300
170
340
50 
90 
80 
200
60

输出 #1

-7

输入输出样例 #2

输入 #2

290 
230 
280 
200 
300 
170 
330 
50 
90 
80 
200 
60

输出 #2

1580

题解代码

#include 
using namespace std;

int main()
{
    int a = 0,b = 0, c = 0;
    for(int k1 = 0; k1 < 12; ++k1)
        {
            cin >> a;
            b = b + 300 - a;
            if( b < 0)
            {
                cout << "-" << k1+1;
                break;
            }
            while(b >= 100)
                {
                    b -= 100;
                    c += 100;
                }
        }
    if(b >= 0)
        cout << c*1.2 + b;
    return 0;
}

你可能感兴趣的:(C/C++语言学习历程,c++,学习,算法,循环)