POJ部分水题

一.POJ1000    A+B Problem

1.题意

输出a+b的和(CE了一次,发现poj不能用万能头文件)

2.代码

//输出a+b的和

#include
using namespace std;
int main(){
    ios::sync_with_stdio(0),cin.tie(0);
    int a,b;
    cin >> a >> b;
    cout << a + b << '\n';
    return 0;
}

 二.POJ1003   Hangover  

1.题意

给定某个数k,求1/2+1/3+...+1/(n+1) > k其中的这个n

2.思路

直接打表求就可

3.代码

//给出某个数c,1/2+1/3+...+1/(n+1) < c 的n

#include
#include
#include
using namespace std;

const int maxn = 400;
int main(){
    float c;
    float num[maxn];
    //打表
    num[0] = num[1] = 0;
    num[2] = (float)1/2;
    for (int i = 3; i < maxn; i++)  num[i] = num[i-1] + (float)1 / i;
    while (1){
        cin >> c;
        if (c == 0.00)  return 0;
        int flag;
        if (c <= 0.5){
            cout <<"1 card(s)" << '\n';
            continue;
        }
        for (int i = 2; num[i] < c; i++)    flag = i;
        cout << flag << " card(s)" << '\n';
    }  
}

三.POJ1004    Financial Management   

1.题意

给出十二个月每月的结余,求平均

2.代码

#include
#include
using namespace std;

int main(){
    ios::sync_with_stdio(0),cin.tie(0);
    float sum = 0.00,n;
    for (int i = 0; i < 12; i++){
        cin >> n;
        sum += n;
    }
    cout << "$";
    cout << fixed << setprecision(2) << (float)sum / 12 << '\n';
    return 0;
}

四.POJ1005     I Think I Need a Houseboat

1.题意

某人发房,去考察当地,发现该地每年以50平方英里再减少面积。给定一个坐标,求出他在第几年会被腐蚀。

2.思路

减少面积为半圆50,也就是整个圆为100.起初腐蚀面积为0,给出坐标x,y。计算出到原点的距离平方:x^2 + y^2.以这个距离为半径平方求这个圆的面积,再除以100,得到的结果加1就是被腐蚀的年(得到的是小数,向上取整也行,用ceil函数)。

CE了两次,两次都是求pi,一开始用acos(-1)求。编译器能过,poj过不了。可能里面要小数?然后用acos(-1f),好像还是错......不知道为啥,所以干脆直接把代码改成pi = 3.141592654.就过了

3.代码

#include
#include
using namespace std;


int main(){
    ios::sync_with_stdio(0),cin.tie(0);
    int N;
    cin >> N;
    float pi = acos(-1);
    for (int i = 1; i <= N; i++){
        float x,y;
        cin >> x >> y;
        float k = x * x + y * y;
        int n = pi * k / 100;
        cout << "Property " << i << ": This property will begin eroding in year " << n + 1 << "." << '\n';
    }
    cout << "END OF OUTPUT." << '\n';
    return 0;
}

五.POJ1207    The 3n+1 problem

1.题意

有个伪代码,奇数的话执行3n+1,偶数执行/2.期间会得到很多数,直到1为止。这些数的个数就是循环长度(cycle length)。给定区间i,j,要求这期间的最长循环时间。

2.思路

直接暴力就可。注意区间i和j没有说哪个比较大,需要自己判断。

3.代码

#include
#include
#include
using namespace std;
//计算cycle length
int Cycle_Length(int n, int m){
    int len = 0;
    for (int i = n; i <= m; i++){
        int length = 1;//自身
        int j = i;
        while (j != 1){
            if (j % 2 != 0)    j = 3 * j + 1;
            else j /= 2;
            length++;
        }
        len = max(len,length); 
    }
    return len;
}
int main(){
    ios::sync_with_stdio(0),cin.tie(0);
    int x,y;
    while (cin >> x >> y){
        int a = x < y ? x : y;
        int b = x > y ? x : y;
        int n = Cycle_Length(a,b);
        cout << x << " " << y << " " << n << '\n';
    }
    return 0;
}

六.POJ3299    Humidex

1.题意

随机给定温度,露点和湿润指数的其中两个,求另外一个。

2.思路

直接套公式就行,注意输入还有输出。wa了两次,看错题目了,以为给的一定是温度和露点求湿润指数。终究还是英文太菜了+粗心。

3.代码

#include
#include
#include
#include
using namespace std;

int main(){
    char a;
    float T,D,H;
    for (;;){
        T = D = H = 666;
        for (int i = 0; i < 2; i++){
            cin >> a;
            if (a == 'E')   return 0;
            if (a == 'T')   cin >> T;
            else if (a == 'D')  cin >> D;
            else cin >> H;
        }
        if(H == 666)
			H = T + 0.5555 * (6.11*exp(5417.7530*(1/273.16-1/(D+273.16)))-10);
		else if(T == 666)
			T = H-0.5555*(6.11*exp(5417.7530*(1/273.16-1/(D+273.16)))-10);
		else if(D == 666)
			D = 1/((1/273.16)-((log((((H-T)/0.5555)+10.0)/6.11))/5417.7530))-273.16;
        cout << fixed << setprecision(1) << "T " << T << " D " << D << " H " << H << '\n';
    }
    return 0;
}

七.POJ2159    Ancient Cipher

1.题意

 给定一个密文和明文,但是这个密文对应的明文不一定就是这个明文。题目要求就是判断这个密文是不是正确的(或者可以理解为这个明文是不是正确的)。

2.思路

明文先通过凯撒密码(置换密码)进行加密,再通过数列密码进行加密。一开始我的思路是,先求出这个明文对应的凯撒密码,然后再找出这些字母所有可能顺序,然后一个个比对。但是明显这样时间必然会超时。

题目中没有给出数列密码对应的顺序,就当然不能推出对应的数列密码。所以这条路是不通的。

后来想到,可以不比对字符列,直接比较频数列。先将字母映射到整形数组中去,然后进行比较,如果都一样,则说明两个是对应的。输出YES就行。

3.代码

#include
#include
#include
#include
using namespace std;
const int maxn = 100 + 10;
int main(){
    char s1[maxn],s2[maxn];
    int a[26],b[26];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    while (cin >> s1 >> s2){   
    for (int i = 0; s1[i] != '\0'; i++){
        a[s1[i] - 'A']++;
        b[s2[i] - 'A']++;
    }
    sort(a,a+26);
    sort(b,b+26);
    for (int i = 0; i < 26; i++)
        if (a[i] != b[i]){
            cout << "NO" << '\n';
            return 0;
        }   
    cout << "YES" << '\n';
    }
    return 0;
}

八.POJ1083    Moving Tables

1.题意

有条走廊,两边是各200个房间,走廊太小了只能够移动一张桌子,其他桌子不能够过。可以同时移动桌子,但是不能占用同一条房间面前的走廊。一个房间移动到另外一个房间的时间是10min。

给定T个测试用例,其中N个移动对象。求出最短的移动时间。

2.思路

其实就是求给出的例子中,有没有重叠的部分,重叠了几次。例如样例中的(10,100)(20,80)(30,50),其中的30-50该区域三个区间都有包括,总共重叠了三次,所以直接3*10就是最短的时间。

用数组来标示区间,我的代码中是直接,很暴力,可以稍微优化一点,给的房间号+1再除以2,这样循环次数可以减少。

注意,题目中没有给定说先给出的那个数会比后面的数小,所以需要判断。不然会wa。

3.代码

#include
#include
#include
using namespace std;
const int maxn = 400 + 10;
int main(){
    ios::sync_with_stdio(0),cin.tie(0);
    int T,N,bg,ed;
    int num[maxn];
    cin >> T;
    while (T--){
        memset(num,0,sizeof(num));
        int maxins = -66;
        cin >> N;
        for (int i = 0; i < N; i++){
            cin >> bg >> ed;
            if (bg > ed){
                int tmp = bg;
                bg = ed;
                ed = tmp;
            }
            for (int j = bg; j <= ed; j++){
                num[j]++;
                if (maxins < num[j])    maxins = num[j];//更新最大的重叠次数
            }
        }
        cout << maxins * 10 << '\n';
    }
    return 0;
}

九.POJ3094    Quicksum

1.题意

给定字符串,求每个字符值的和。

2.思路

这道题太水了,没啥好说的。注意有读取空格就对了。

3.代码

#include
#include
#include
using namespace std;
const int maxn = 255 + 10;
int main(){
    ios::sync_with_stdio(0),cin.tie(0);
    char s[maxn];
    while (gets(s) && s[0] != '#'){
        int sum = 0;
        for (int i = 0; i < strlen(s); i++)
            if (s[i] >= 'A' && s[i] <= 'Z') sum +=(s[i]-'A'+1) * (i+1);
        cout << sum << '\n';
    }
    return 0;
}

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(POJ训练,acm竞赛,算法)