用天梯赛打开暑假生活的第十天

发布时间 2023-07-04 21:52:38作者: 寒心小呆

从坐牢到入门的程序设计(10)

开始时间2023-07-04 09:10:02

结束时间2023-07-04 21:48:28

前言:哎嘿,呜呼!

L1-046 整除光棍

一、题目编号及题目说明

二、程序功能测试及说明

  使用循环来计算一个奇数x的光棍数,其中光棍数定义为只包含数字1且能被x整除的数。

三、程序设计思路及结构说明

  1. 输入一个奇数x。
  2. 初始化计数器count为1,并初始化一个变量a为1,用于表示光棍数。
  3. 通过循环找到能除以x的最小的光棍数a。每次循环将a乘以10加1,同时将计数器count加1。
  4. 输出最高位数字,即将a除以x的商。
  5. 使用变量t记录余数,初始化为a对x取模的结果。
  6. 循环将商从高到低位依次输出,直到余数为0。每次循环将t乘以10加1,并输出t除以x的商,同时将计数器count加1,更新t为t对x取模的结果。
  7. 输出计数器count,表示输出的光棍数的位数。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int x;
    cin>>x;//x是那个奇数
    int count = 1;   
    int a = 1;        //a用来表示光棍数
    //通过循环求出能除以x的最小a值(注:此处并不要求整除,能进行除法运算即可,即a>=x便可)
    while (a < x) {            
        a = a * 10 + 1;        
        count++;
    }
    printf("%d", a / x);    //输出最高位数字
    int t = a % x;            //用t记录余数;
    while (t!=0) {            //利用循环将商从高到低位依次输出,直到余数为0。
        t = t * 10 + 1;        
        printf("%d", t / x);
        count++;
        t %= x;
    }
    printf(" %d\n", count);

}

五、题目评分

L1-047 装睡

一、题目编号及题目说明

二、程序功能测试及说明

  输入n个人的姓名、年龄和体重,然后判断他们的年龄和体重是否符合条件,如果不符合条件就输出对应的姓名。

三、程序设计思路及结构说明

  1. 输入一个整数n,表示接下来要输入的人数。
  2. 使用循环从0到n-1遍历每个人。
  3. 在循环中,首先输入一个字符串s,表示姓名。
  4. 输入两个整数a和b,分别表示年龄和体重。
  5. 初始化标志变量flag为0,表示当前人的年龄和体重符合条件。
  6. 使用条件判断语句判断年龄和体重是否满足条件,如果不满足,则将标志变量flag设为1。
  7. 如果标志变量flag为1,表示当前人的年龄和体重不符合条件,则输出对应的姓名。
  8. 循环结束后,返回0,表示程序正常结束。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int i=0;
    for(i=0;i<n;i++)
    {
        string s;
        int a,b;
        cin>>s>>a>>b;
        int flag=0;
        if(a<15||a>20)
        {
            flag=1;
        }
        if(b<50||b>70)
        {
            flag=1;
        }
        if(flag==1)
        {
            cout<<s<<endl;
        }
    }
    return 0;
}

五、题目评分

 L1-048 矩阵A乘以B

一、题目编号及题目说明

二、程序功能测试及说明

  实现了两个矩阵的乘法运算,并输出结果矩阵。

三、程序设计思路及结构说明

  1. 首先输入两个整数Ra和Ca,分别表示矩阵A的行数和列数。
  2. 创建一个二维动态数组A,大小为Ra行Ca列,并读入矩阵A的元素。
  3. 输入两个整数Rb和Cb,分别表示矩阵B的行数和列数。
  4. 创建一个二维动态数组B,大小为Rb行Cb列,并读入矩阵B的元素。
  5. 判断两个矩阵是否满足乘法条件,即A的列数等于B的行数,如果不满足,则输出错误信息并返回。
  6. 创建一个二维动态数组C,大小为Ra行Cb列,用于存放结果矩阵。
  7. 使用三重循环计算矩阵乘法,遍历矩阵A的每一行和矩阵B的每一列,逐个元素相乘并累加到结果矩阵C中。
  8. 输出结果矩阵的行数和列数。
  9. 依次输出结果矩阵C的每个元素,每行元素之间用空格分隔。

四、程序源代码

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int Ra, Ca;
    cin >> Ra >> Ca;
    vector<vector<int>> A(Ra, vector<int>(Ca));
    for (int i = 0; i < Ra; i++) {
        for (int j = 0; j < Ca; j++) {
            cin >> A[i][j];
        }
    }

    int Rb, Cb;
    cin >> Rb >> Cb;
    vector<vector<int>> B(Rb, vector<int>(Cb));
    for (int i = 0; i < Rb; i++) {
        for (int j = 0; j < Cb; j++) {
            cin >> B[i][j];
        }
    }

    if (Ca != Rb) {
        cout << "Error: " << Ca << " != " << Rb << endl;
        return 0;
    }

    vector<vector<int>> C(Ra, vector<int>(Cb));
    for (int i = 0; i < Ra; i++) {
        for (int j = 0; j < Cb; j++) {
            for (int k = 0; k < Ca; k++) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    cout << Ra << " " << Cb << endl;
    for (int i = 0; i < Ra; i++) {
        for (int j = 0; j < Cb; j++) {
            cout << C[i][j];
            if (j < Cb - 1) {
                cout << " ";
            }
        }
        cout << endl;
    }

    return 0;
}

五、题目评分

 L1-049 天梯赛座位分配

一、题目编号及题目说明

二、程序功能测试及说明

  实现了一个根据输入数组a中的元素值生成二维数组b的过程,并打印出二维数组的内容。

三、程序设计思路及结构说明

  1. 首先输入一个整数n,表示数组a的长度。
  2. 创建一个一维数组a,大小为n,并读入数组a的元素。
  3. 找到数组a中的最大值max。
  4. 创建一个二维数组b,大小为n行max*10列。
  5. 使用两重循环,遍历二维数组b的每个元素,如果满足条件j < a[i]*10,则根据不同情况给b[i][j]赋值。
    • 如果i != f(表示上一个被赋值的元素所在的行),则t加1,将t赋值给b[i][j],并更新f为i。
    • 如果i == f,则t加2,将t赋值给b[i][j],并更新f为i。
  6. 使用两重循环遍历二维数组b,逐行打印出数组b的内容,每10个元素换行输出。
    • 输出每个元素后,如果当前元素是该行的最后一个元素,则换行,否则输出空格。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,i,j,a[101],b[110][1001],t=0,max=0,f=-1;
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>a[i];
        if(max<a[i])
        max=a[i];
    }
    for(j=0;j<max*10;j++) 
        for(i=0;i<n;i++)
        {
            if(j<a[i]*10)
            {
                if(i!=f)
                {
                    t++;
                    b[i][j]=t;
                    f=i;
                }        
                else
                {
                    t+=2;
                    b[i][j]=t; 
                    f=i;
                }            
            }
        }
    for(i=0;i<n;i++)
    {
        cout<<"#"<<i+1<<endl;
        for(t=0;t<a[i]*10;t++)
         {
             cout<<b[i][t];
             if((t+1)%10==0)
             cout<<endl;
             else
             cout<<" ";
         }
    }
 }     

五、题目评分

总结:啊哈哈哈,今天很开心。ps:其实我早上十点半就写完咯!

每日一mo:于是我把和你的所有事压在心底但经常隐隐作痛....