用天梯赛打开暑假生活的第十天
从坐牢到入门的程序设计(10)
开始时间2023-07-04 09:10:02
结束时间2023-07-04 21:48:28
前言:哎嘿,呜呼!
L1-046 整除光棍
一、题目编号及题目说明
二、程序功能测试及说明
使用循环来计算一个奇数x的光棍数,其中光棍数定义为只包含数字1且能被x整除的数。
三、程序设计思路及结构说明
- 输入一个奇数x。
- 初始化计数器count为1,并初始化一个变量a为1,用于表示光棍数。
- 通过循环找到能除以x的最小的光棍数a。每次循环将a乘以10加1,同时将计数器count加1。
- 输出最高位数字,即将a除以x的商。
- 使用变量t记录余数,初始化为a对x取模的结果。
- 循环将商从高到低位依次输出,直到余数为0。每次循环将t乘以10加1,并输出t除以x的商,同时将计数器count加1,更新t为t对x取模的结果。
- 输出计数器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个人的姓名、年龄和体重,然后判断他们的年龄和体重是否符合条件,如果不符合条件就输出对应的姓名。
三、程序设计思路及结构说明
- 输入一个整数n,表示接下来要输入的人数。
- 使用循环从0到n-1遍历每个人。
- 在循环中,首先输入一个字符串s,表示姓名。
- 输入两个整数a和b,分别表示年龄和体重。
- 初始化标志变量flag为0,表示当前人的年龄和体重符合条件。
- 使用条件判断语句判断年龄和体重是否满足条件,如果不满足,则将标志变量flag设为1。
- 如果标志变量flag为1,表示当前人的年龄和体重不符合条件,则输出对应的姓名。
- 循环结束后,返回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
一、题目编号及题目说明
二、程序功能测试及说明
实现了两个矩阵的乘法运算,并输出结果矩阵。
三、程序设计思路及结构说明
- 首先输入两个整数Ra和Ca,分别表示矩阵A的行数和列数。
- 创建一个二维动态数组A,大小为Ra行Ca列,并读入矩阵A的元素。
- 输入两个整数Rb和Cb,分别表示矩阵B的行数和列数。
- 创建一个二维动态数组B,大小为Rb行Cb列,并读入矩阵B的元素。
- 判断两个矩阵是否满足乘法条件,即A的列数等于B的行数,如果不满足,则输出错误信息并返回。
- 创建一个二维动态数组C,大小为Ra行Cb列,用于存放结果矩阵。
- 使用三重循环计算矩阵乘法,遍历矩阵A的每一行和矩阵B的每一列,逐个元素相乘并累加到结果矩阵C中。
- 输出结果矩阵的行数和列数。
- 依次输出结果矩阵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的过程,并打印出二维数组的内容。
三、程序设计思路及结构说明
- 首先输入一个整数n,表示数组a的长度。
- 创建一个一维数组a,大小为n,并读入数组a的元素。
- 找到数组a中的最大值max。
- 创建一个二维数组b,大小为n行max*10列。
- 使用两重循环,遍历二维数组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。
- 使用两重循环遍历二维数组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<<" "; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程