当前位置: 首页 > news >正文

杭电oj(1008、1012、1013、1014、1017)题解

目录

​编辑

1008

题目

思路

代码

1012

题目

思路

代码

1013

题目

思路

代码

1014

题目

思路

代码

1017

题目

思路

处理每组测试数据

计算满足条件的整数对数量

代码


 

1008

题目

思路

  • s = a[0];:初始化 s 为数组的第一个元素,即电梯从第 0 层上升到第一个楼层的高度。
  • for(int i = 0; i < n - 1; i++):遍历数组,比较相邻两个楼层的高度。
    • if(a[i] > a[i + 1]):如果当前楼层高于下一个楼层,说明电梯在下降,将下降的高度 a[i] - a[i + 1] 累加到 x 中。
    • else:如果当前楼层低于下一个楼层,说明电梯在上升,将上升的高度 a[i + 1] - a[i] 累加到 s 中。
  • 总时间的计算规则如下:
    • n * 5:表示电梯在 n 个楼层停留的总时间,因为每层停留 5 秒。
    • s * 6:表示电梯上升的总时间,因为电梯上升每层需要 6 秒。
    • x * 4:表示电梯下降的总时间,因为电梯下降每层需要 4 秒。
  • 将这三部分时间相加,得到电梯运行的总时间,并输出结果。

代码

#include<iostream>
using namespace std;
int a[100000];
int main(){int n;while(cin>>n&&n){int s=0;int x=0;for(int i=0;i<n;i++){cin>>a[i];}s=a[0];for(int i=0;i<n-1;i++){if(a[i]>a[i+1]){x+=a[i]-a[i+1];}else{s+=a[i+1]-a[i];}}cout<<n*5+s*6+x*4<<endl;} return 0;
}

1012

题目

思路

  • 外层 for 循环从 \(i = 4\) 到 \(i = 9\),表示计算泰勒级数展开式前 5 项到前 10 项的和。
  • 内层 for 循环从 \(j = 0\) 到 \(j = i\),计算每一项 \(\frac{1}{j!}\) 并累加到 sum 中。
  • 每次外层循环结束后,将 sum 的值存储到数组 a 的相应位置。

代码

#include<iostream>
using namespace std;
double a[10]={1,2,2.5,2.666666667,2.708333333};
double jc(int n){if(n<=1) return 1;double sum=1.0;for(int i=1;i<=n;i++){sum*=i;}return sum;
}
int main(){for(int i=4;i<=9;i++){double sum=0;for(int j=0;j<=i;j++){sum+=1/jc(j);}a[i]=sum;}cout<<"n e"<<endl<<"- -----------"<<endl;for(int i=0;i<10;i++){if(i>2) printf("%d %.9lf\n",i,a[i]);else cout<<i<<" "<<a[i]<<endl;}return 0;
}

1013

题目

思路

  • string s;:定义一个字符串变量 s,用于存储输入的字符串。
  • while(getline(cin,s)&&s!="0"):使用 getline 函数从标准输入读取一行字符串,只要读取的字符串不为 "0",就继续处理。
  • a = 0;:每次处理新的输入时,将全局变量 a 初始化为 0。
  • for(int i = 0; i < s.size(); i++){ a += s[i] - '0'; }:遍历输入字符串 s 的每个字符,将字符转换为对应的数字(通过减去字符 '0' 的 ASCII 码值)并累加到 a 中,得到输入数字的各位数字之和。
  • while(a > 10){ swh(a); }:如果 a 大于 10,说明还需要继续计算各位数字之和,调用 swh 函数对 a 进行处理,直到 a 小于等于 10。
  • if(a == 10) a = 1;:若最终的 a 等于 10,将其修正为 1,因为数字根必须是一位数。
  • cout << a << endl;:输出最终的数字根。

注:要考虑大数

代码

#include<iostream>
#include<string>
using namespace std;
int a;
void swh(int num){int sum=0;while(num>0){sum+=num%10;num/=10;}a=sum;
}
int main(){string s;while(getline(cin,s)&&s!="0"){a=0;for(int i=0;i<s.size();i++){//cout<<a<<endl;a+=s[i]-'0';}while(a>10){swh(a);}if(a==10) a=1;cout<<a<<endl;}return 0;
}
//1013 //没有考虑数据过大 
//#include<iostream>
//using namespace std;
//int a;
//void swh(int num){
//	int sum=0;
//	while(num>0){
//		sum+=num%10;
//		num/=10;
//	}
//	a=sum;
//}
//int main(){
//	int n;
//	while(cin>>n&&n){
//		swh(n);
//		while(a>9){
//			swh(a);
//		}
//		cout<<a<<endl;
//	}
//	return 0;
//}

1014

题目

思路

  • int x, y;:定义两个 long long 类型的变量 x 和 y,用于存储用户输入的整数对。
  • while(cin>>x>>y):使用 while 循环持续读取用户输入的整数对,只要输入有效,就会继续处理。
  • if ( gcd(x, y) == 1):调用 gcd 函数计算 x 和 y 的最大公约数,若结果为 1,表明这两个整数互质。
    • 若互质,使用 setw(10) 设置输出宽度为 10 个字符,依次输出 x 和 y,然后输出 " Good Choice",并换行两次。
  • else:若最大公约数不为 1,同样使用 setw(10) 设置输出宽度,输出 x 和 y,接着输出 " Bad Choice",并换行两次。

代码

#include<iostream>
#include <iomanip>
#include <sstream>
using namespace std;
#define int long long
int gcd(int a,int b){return b==0?a:gcd(b,a%b);
} 
signed main(){int x,y;while(cin>>x>>y){if ( gcd(x, y) == 1) {cout <<  setw(10) << x << setw(10) << y;cout << "    Good Choice" << endl << endl;} else {cout <<  setw(10) << x << setw(10) << y;cout << "    Bad Choice" << endl << endl;}}return 0;
}

1017

题目

思路

处理每组测试数据
  • while(t--):使用 while 循环处理 t 组测试数据,每次循环 t 的值减 1。
  • int n, m;:定义两个整数变量 n 和 m,用于存储输入的整数对。
  • int k = 1;:定义一个整数变量 k,用于记录当前测试用例的编号,初始值为 1。
  • while(cin>>n>>m):使用 while 循环不断读取整数对 (n, m),直到遇到 n 和 m 都为 0 的情况。
  • if(n==0 && m==0) break;:如果输入的 n 和 m 都为 0,则跳出内层 while 循环,结束当前组测试数据的处理。
  • if(t) cout<<endl;:如果还有剩余的测试数据(即 t 不为 0),则输出一个空行,用于分隔不同组的测试数据。
计算满足条件的整数对数量
  • int count = 0;:定义一个整数变量 count,用于记录满足条件的整数对数量,初始值为 0。
  • for(int i = 1; i < n; i++):外层循环遍历 i 从 1 到 n - 1
  • for(int j = i + 1; j < n; j++):内层循环遍历 j 从 i + 1 到 n - 1,确保 j > i
  • double x = 1.0 * (i * i + j * j + m) / (i * j);:计算 (i² + j² + m) / (i * j) 的值,并将结果存储在 x 中。
  • if(x == (int)x):判断 x 是否为整数,如果是整数,则 count 加 1。

代码

#include<iostream>
using namespace std;
int main(){int t;cin>>t;while(t--){int n,m;int k=1;while(cin>>n>>m){if(n==0 && m==0) break;int count=0;for(int i=1;i<n;i++){for(int j=i+1;j<n;j++){double x=1.0*(i*i+j*j+m)/(i*j);if(x==(int)x){count++;	}}}printf("Case %d: %d\n",k++,count);}if(t) cout<<endl;}return 0;
}

http://www.xdnf.cn/news/183295.html

相关文章:

  • 【文心快码】确实有点东西!
  • Redis 通用命令与keyspace
  • element-ui dropdown 组件源码分享
  • QML中的色彩应用
  • 调度算法的模拟及应用
  • 接口测试详解
  • electron-vite 应用打包自定义图标不显示问题
  • 28-29【动手学深度学习】批量归一化 + ResNet
  • Java线程池详解
  • 2024年12月GESP 图形化 一级考级真题——飞行的小猫
  • Linux的例行性工作(crontab)
  • 码蹄杯——tips
  • MAGI-1: Autoregressive Video Generation at Scale
  • 基于Jamba模型的天气预测实战
  • java工具类
  • Redis哨兵模式深度解析:实现高可用与自动故障转移的终极指南
  • 大语言模型架构基础与挑战
  • 简单了解Java的I/O流机制与文件读写操作
  • 智能电网新引擎:动态增容装置如何解锁输电线路潜力?
  • spark学习总结
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 14)
  • Java大厂面试:互联网医疗场景中的Spring Boot与微服务应用
  • 第42周:文献阅读
  • 杭州小红书代运营公司-品融电商:专业赋能品牌社交增长
  • Java + Spring Boot + MyBatis获取以及持久化sql语句的方法
  • 单片机之间的双向通信
  • 可视化图解算法: 二叉搜索树转双向排序链表
  • Spdlog 日志组件的安装及使用
  • 【C语言】程序分配的区域
  • spring框架学习(下)