Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >POJ1003/1004/1005/1207/3299/2159/1083/3094/2388解题(刷一波水题)

POJ1003/1004/1005/1207/3299/2159/1083/3094/2388解题(刷一波水题)

作者头像
Michael阿明
发布于 2021-02-20 02:21:53
发布于 2021-02-20 02:21:53
22100
代码可运行
举报
运行总次数:0
代码可运行

POJ 1003

题目链接 http://poj.org/problem?id=1003 大意:长度=1/2+1/3+…+1/n,给定长度值,求n

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;
int main()
{
    float len = 0,sum;
    int n;
    while(cin >> len && len != 0)
    {
        for(n=2,sum=0;sum<len;++n)
        {
            sum += 1/(n*1.0);
        }
        cout << n-2 << " " << "card(s)" << endl;
    }
    return 0;
}

POJ 1004

题目链接 http://poj.org/problem?id=1004 大意:求平均数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;
int main()
{
    float money,avgmoney=0;
    int i = 0;
    while(cin >> money && i != 12)
    {
        avgmoney += money;
        ++i;
   }
   cout << "$" << avgmoney/12 << endl;
}

POJ 1005

题目链接 http://poj.org/problem?id=1005 大意:求一个点什么时候被慢慢变大的半圆吃掉

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;
#define PI 3.141592654
int main()
{
    double X,Y;
    double area,distance,dangerdistance;
    int year;
    int N;
    cin >> N;
    for(int i = 1; i <= N; ++i)
    {
        cin >> X >> Y;
        distance = X*X+Y*Y;
        dangerdistance=0;  //之前没有写这句,没有初始化,踩过好几次地雷了!!!!!!!!
        for(area = 0,year =0; dangerdistance <= distance; ++year)
        {
            area += 50;
            dangerdistance = 2*area/PI;
        }
        cout << "Property " << i << ": This property will begin eroding in year " 
		        << year << "." << endl;
    }
    cout << "END OF OUTPUT.";
    return 0;
}

POJ 1207

题目链接 http://poj.org/problem?id=1207 大意:有一个数,按那个规则,最后能够转换到1,算出这个序列的长度,然后输入两个数,在这两个数构成的闭区间中,每个数都有其序列长度,求这个序列中最长的一个。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;
int main()
{
	int a,b;
	while(cin >> a >> b)
	{
		cout << a << " " << b << " " ;//坑,要先输出a,b,如果调换了,输出就颠倒了
		if(a > b)
			swap(a,b);
		int maxcyclen=0;
		int cyctime=0;
		int num=0;
		for(int i = a,j=0; i <= b; ++i,++j)
		{
			num = i;
			cyctime=1;
			while(num != 1)
			{
				if(num%2==1)
				{
					num = 3*num+1;
				}
				else
				{
					num /= 2;
				}
				++cyctime;
			}
			if(maxcyclen < cyctime)
			{
				maxcyclen = cyctime;
			}
		}
		cout << maxcyclen << endl;
	}
	return 0;
}

POJ 3299

题目链接 http://poj.org/problem?id=3299 大意:公式推导,给任意两个,求第三个。(注意输入顺序)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;
#include<iomanip>
#include<math.h>

int main()
{
	cout << setiosflags(ios::fixed) << setprecision(1);//需要头文件#include <iomanip>,小数点精度1位
	double t,d,h,num1,num2;
	char alpha,beta;
	while(cin >> alpha && alpha != 'E')
	{
		cin >> num1 >> beta >> num2;
		if(alpha=='T'&&beta=='D' || alpha=='D'&&beta=='T')
		{
			t = num1;
			d = num2;
				if(alpha=='D')//输入顺序变了,名称与内容不符,换回来
				swap(t,d);
			h=t+0.5555*(6.11*exp(5417.7530*((1/273.16)-(1/(d+273.16))))-10);
		}
		else if(alpha=='T'&&beta=='H' || alpha=='H'&&beta=='T')
		{
			t = num1;
			h = num2;
			if(alpha=='H') //输入顺序变了,名称与内容不符,换回来
				swap(t,h);
			d=1/(1/273.16-log(((h-t)/0.5555+10.0)/6.11)/5417.7530)-273.16;;
		}
		else if(alpha=='D'&&beta=='H' || alpha=='H'&&beta=='D')
		{
			d = num1;
			h = num2;
			if(alpha=='H') //输入顺序变了,名称与内容不符,换回来
				swap(d,h);
			t=h-0.5555*(6.11*exp(5417.7530*((1/273.16)-(1/(d+273.16))))-10.0);
		}	
		cout << "T " << t << " D " << d << " H " << h << endl; 
	}
	return 0;
}

POJ 2159

题目链接 http://poj.org/problem?id=2159 大意: 1.一串字符串(大写字母),每个字母可以按照一个数平移成另一个字母 2.每一个字符加密后,再乱序 3.给定A,B两个字符串,求A是否可能是B的密文

之前题目理解错了,以为每个字母都是平移1位(按照示例的理解)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int secretnum = 1;	//移动的位数(每个都一样)
    char word1,word2;
    vector<char> secrettext,origintext;
    while(cin.get(word1))
    {
        if(word1 == '\n')
            break;
        if(word1 >= 'A' && word1 <= 'Z')
        {
            word1 = word1 - secretnum;
            if(word1 < 'A')
                word1 = word1 + 26;
            secrettext.push_back(word1);
        }
        else
        {
            continue;
        }
    }
    while(cin.get(word2))
    {
        if(word2 == '\n')
            break;
        if(word2 >= 'A' && word2 <= 'Z')
        {
            origintext.push_back(word2);
        }
        else
        {
            continue;
        }
    }
    sort(secrettext.begin(),secrettext.end());//字母升序排序
    sort(origintext.begin(),origintext.end());//字母升序排序
    for(int i = 0;i != secrettext.size();++i)
    {
        if(secrettext[i] != origintext[i])
        {
            cout << "NO" ;
            return 0;
        }
    }
    cout << "YES" ;//都升序排列后,每一位都相等则ok(题目没说都移动同样位数,解答错误)
    return 0;
}

正确的解答

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    char word1, word2;
    int secrettext[26]={0}, origintext[26]={0};
    while(cin.get(word1))
    {
        if(word1 == '\n')
            break;
        if(word1 >= 'A' && word1 <= 'Z')
        {
            ++secrettext[word1-'A'];    //统计每个字符的频次存入数组
        }
        else
        {
            continue;
        }
    }
    while(cin.get(word2))
    {
        if(word2 == '\n')
            break;
        if(word2 >= 'A' && word2 <= 'Z')
        {
            ++origintext[word2-'A'];    //统计每个字符的频次存入数组
        }
        else
        {
            continue;
        }
    }
    sort(secrettext,secrettext+26); // 对频次进行排序
    sort(origintext,origintext+26); // 对频次进行排序
    for(int i = 0;i != 26;++i)
    {
        if(secrettext[i] != origintext[i])
        {
            cout << "NO" ;
            return 0;
        }
    }
    cout << "YES" ; //频次完全一致,则每个字符经过一定平移即可得到第二行的字符串
    return 0;
}

POJ 1083

题目链接 http://poj.org/problem?id=1083

大意: 1.400个房间,从一个房间移动1张桌子到另一个房间,需要10分钟。 2.过道只能有一张桌子,包含门前的位置,被占用的时候,其它需要经过的移动需要等待,不能同时进行。 解法: 1.申请200大小的数组代表门前的过道,从房间m到房间n,(m < n),则 ( m - 1 ) /2 到(n - 1)/ 2 的元素都加10; 2.扫描数组,最大的元素即为搬运的时间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int testtime, table, roomid1, roomid2;
	int corridor[200]={0}, corridor_id, maxtime;
	cin >> testtime;
	while(testtime--)
	{
		memset(corridor,0,sizeof(corridor)); 
		//清零初始化(不能写corridor[200]={0};只能定义的时候写一次),memset需要cstring头文件
		//经测试,单独写的corridor[200]={0};对数组没有任何操作,编译器可能不报错,需要避开这个坑!!!
		cin >> table;
		while(table--)
		{
			cin >> roomid1 >> roomid2;
			if(roomid1 > roomid2)
				swap(roomid1,roomid2);
			for(corridor_id = (roomid1-1)/2; corridor_id <= (roomid2-1)/2; ++corridor_id)
			{
				corridor[corridor_id] += 10;
			}
		}
		maxtime = 0;
		for(corridor_id = 0; corridor_id != 200; ++corridor_id)
		{
			if(maxtime < corridor[corridor_id])
				maxtime = corridor[corridor_id];
		}
		cout << maxtime << endl;
	}
}

POJ 3094

题目链接 http://poj.org/problem?id=3094 大意: 每一行字符串包括空格,经过对每个字符乘以系数,然后加总求和。 例如: ACM:1 * 1 + 2 * 3 + 3 * 13 = 46 (A=1,B=2,…空格=0) MID CENTRAL:1 * 13 + 2 * 9 + 3 * 4 + 4 * 0 (空格占位置)+ 5 * 3 + 6 * 5 + 7 * 14 + 8 * 20 + 9 * 18 + 10 * 1 + 11 * 12 = 650

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;
int main()
{
    char alpha;
    int quicksum = 0;
    while(cin.get(alpha) )
    {
        if(alpha == '#')
            break;
        quicksum = 0;
        for(int i = 1; alpha != '\n';++i)
        {
            if(alpha != ' ')
                quicksum = quicksum + i*(alpha-'A'+1);
            cin.get(alpha);  //cin.get()可以捕捉空格, cin >> char 不可以捕捉空格回车
        }
        cout << quicksum << endl;
    }
}

POJ 2388

题目链接 http://poj.org/problem?id=2388 大意:求中位数,简单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int num;
	cin >> num;
	int *milk = new int[num];
	for(int i = 0; i != num; ++i)
	{
		cin >> milk[i];
	}
	sort(milk,milk+num);
	cout << milk[num/2];
	delete [] milk;
	milk = NULL;
	return 0;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @description: poj2388 求中位数
 * @author: michael ming
 * @date: 2019/5/31 0:12
 * @modified by: 
 */
#include <algorithm>
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
int main()
{
    int N, num, i = 0;
    cin >> N;
    vector<int> maxheap, minheap;
    while(i++ < N && cin >> num)
    {
        if(maxheap.empty())
        {
            maxheap.push_back(num);
            continue;
        }
        //----选择插入哪个堆-----
        if(!maxheap.empty() && num <= maxheap[0])
        {
            maxheap.push_back(num);
            push_heap(maxheap.begin(),maxheap.end());//默认采用 < , 大堆
        }
        else if(!maxheap.empty() && num > maxheap[0])
        {
            minheap.push_back(num);
            push_heap(minheap.begin(),minheap.end(),greater<int>());//小堆,采用 >
        }
        //----平衡两个堆的节点比列----
        if(maxheap.size() > minheap.size() && maxheap.size() - minheap.size() > 1)
        {
            minheap.push_back(maxheap[0]);//大堆顶进入小堆
            push_heap(minheap.begin(),minheap.end(),greater<int>());
            pop_heap(maxheap.begin(),maxheap.end());//堆顶到末尾了
            maxheap.pop_back();//删除到末尾的"堆顶"
        }
        else if(maxheap.size() < minheap.size())
        {
            maxheap.push_back(minheap[0]);
            push_heap(maxheap.begin(),maxheap.end());//默认采用 < , 大堆
            pop_heap(minheap.begin(),minheap.end(),greater<int>());
            minheap.pop_back();
        }
    }
    if(maxheap.size())
        cout << maxheap[0] << endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/08/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
POJ 1442 Black Box(大小堆,求第K小的元素)
可以利用大小堆,大堆长度从1开始,每次+1 大堆元素都比小堆的小,那么大堆顶的元素就是第k小的元素
Michael阿明
2021/02/20
3390
POJ 1442 Black Box(大小堆,求第K小的元素)
POJ 1936 字符匹配(水题)
题目链接: http://poj.org/problem?id=1936 题目大意: 给定字符a,b,问b中去掉一些字符后能不能得到a 解题思路: 暴力从前往后扫描一遍即可。 AC代码: /
Michael阿明
2021/02/20
3560
POJ 1936 字符匹配(水题)
poj 1250 解题(链表法)
住宿床位有限,按顺序入住,用ABC等代表单个人,第1次出现代表入住,第2次出现代表离开
Michael阿明
2021/02/20
3830
poj 1250 解题(链表法)
POJ 1577 Falling Leaves(二叉查找树)
题目大意: 二叉查找树按照叶子节点,从下往上抹去该树,给出抹除字符序列,求该二叉树,并前序打印
Michael阿明
2021/02/20
3280
POJ 1577 Falling Leaves(二叉查找树)
POJ 1200 Crazy Search 查找有多少种不同的子串(hash)
题目链接: http://poj.org/problem?id=1200 题目大意:给定子串长度,字符中不同字符数量,以及一个字符串,求不同的子串数量。 1.采用map解题 把子串插入map,m
Michael阿明
2021/02/20
5570
POJ 1200 Crazy Search 查找有多少种不同的子串(hash)
数据结构--堆 Heap
堆排序代码见:https://blog.csdn.net/qq_21201267/article/details/80993672#t7
Michael阿明
2021/02/20
3190
数据结构--堆 Heap
【题解】POJ3253
题目大意就是给出n个不同长度的木板,要求将一条整的木板分割成这n个小木板。每次分割的cost就是【分割成的两个子木板】的长度相加。
灯珑LoGin
2022/10/31
2260
POJ 2453 贪心应用
1. 题目 1.1 题目链接 http://poj.org/problem?id=2453 1.2 题目大意 一个数x的二进制表示有n个1,求一个有相同个数1的二进制数(比x大,且要最小的) 1.3
Michael阿明
2021/02/20
2770
POJ 2453 贪心应用
Ants(POJ No.1852)
该题目的关键点在于当两个蚂蚁相遇时,各自往回走的情况等价于两只蚂蚁按原来的方向继续走。类似于小球的弹性碰撞。
种花家的奋斗兔
2020/11/13
3480
POJ 1804 逆序数 解题(归并排序)
文章目录 解法1:直接双重循环求解,n*n复杂度 解法2:采用归并排序求解,复杂度nlgn 题目链接 http://poj.org/problem?id=1804 题目大意: 让一串无
Michael阿明
2021/02/20
4530
POJ 1804 逆序数 解题(归并排序)
POJ 1363 火车厢排队问题(栈)
题目大意: A站有编号为1到N,N最大1000,的车厢,车厢进入中转station了就不能回到A,只能停在station内或者进入B站,问能不能按照给定的顺序排成那样的车厢号。
Michael阿明
2021/02/20
6230
POJ 1363 火车厢排队问题(栈)
POJ 1321 棋盘问题(回溯)
在一个给定形状的棋盘(只能在#号的位置摆放)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案个数。
Michael阿明
2021/02/20
4280
POJ 1321 棋盘问题(回溯)
POJ 1064 分割线缆(二分查找)
题目链接:http://poj.org/problem?id=1064 题目大意:多根电缆切成指定段数(每段相同长度),求每段线缆的最大长度(精确到0.01) 这题精度控制是难点,方法很简单,二分查找
Michael阿明
2021/02/20
5680
POJ 1064 分割线缆(二分查找)
POJ 1804
题目:http://poj.org/problem?id=1804 大意:给你一串数字,排序。求出最少的交换次数  \ 我用归并做的 #include<iostream> #include<cstri
瑾诺学长
2018/09/21
3880
POJ 2259 team queue团队排队问题
告诉你一堆人(m个人是一组的,n个人是一组的。。。。);然后一个人来排队了,先看下有自己组的熟人吗?有的话直接排在自己组的人的队尾(呵呵,是不是现实中有这样的),没有熟人的话直接排队尾咯。 题目给定进队和出队命令,求解出队的顺序。
Michael阿明
2021/02/20
5750
POJ 2259 team queue团队排队问题
POJ 1007 DNA排序解题
题目链接 http://poj.org/problem?id=1007 C++代码实现 #include<string> #include<iostream> using namespace std
Michael阿明
2021/02/20
3330
POJ 1007 DNA排序解题
POJ 2287 田忌赛马(贪心)
双方各有n匹战斗力各异的马,分别派出来PK,假设对方先出牌,我方后出,求我方最多能胜几场
Michael阿明
2021/02/20
5460
POJ 2287 田忌赛马(贪心)
POJ 1979 DFS
题目链接:http://poj.org/problem?id=1979 #include<cstring> #include<iostream> using namespace std; int n=
瑾诺学长
2018/09/21
3500
POJ 3122 分披萨(二分查找)
有 n 块披萨(大小不一样), f 个人分,包含主人自己 f+1 人; 每人吃的披萨必须是一块披萨上切下来的。每个人吃的披萨相等,披萨可以有剩余。求每人吃的最大披萨面积。
Michael阿明
2021/02/20
5460
POJ 3122 分披萨(二分查找)
POJ 2967 (水题,考察putchar()按位输入)
题目大意: 给定系列长度,求是否有规定的三角形 (不是所有的都可以组成三角形&&有至少一种组合可以组成三角形)-> 打印通过,否则打印拒绝。
Michael阿明
2021/02/20
2400
POJ 2967 (水题,考察putchar()按位输入)
相关推荐
POJ 1442 Black Box(大小堆,求第K小的元素)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档