输出a+b的和(CE了一次,发现poj不能用万能头文件)
//输出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;
}
给定某个数k,求1/2+1/3+...+1/(n+1) > k其中的这个n
直接打表求就可
//给出某个数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';
}
}
给出十二个月每月的结余,求平均
#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;
}
某人发房,去考察当地,发现该地每年以50平方英里再减少面积。给定一个坐标,求出他在第几年会被腐蚀。
减少面积为半圆50,也就是整个圆为100.起初腐蚀面积为0,给出坐标x,y。计算出到原点的距离平方:x^2 + y^2.以这个距离为半径平方求这个圆的面积,再除以100,得到的结果加1就是被腐蚀的年(得到的是小数,向上取整也行,用ceil函数)。
CE了两次,两次都是求pi,一开始用acos(-1)求。编译器能过,poj过不了。可能里面要小数?然后用acos(-1f),好像还是错......不知道为啥,所以干脆直接把代码改成pi = 3.141592654.就过了
#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;
}
有个伪代码,奇数的话执行3n+1,偶数执行/2.期间会得到很多数,直到1为止。这些数的个数就是循环长度(cycle length)。给定区间i,j,要求这期间的最长循环时间。
直接暴力就可。注意区间i和j没有说哪个比较大,需要自己判断。
#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;
}
随机给定温度,露点和湿润指数的其中两个,求另外一个。
直接套公式就行,注意输入还有输出。wa了两次,看错题目了,以为给的一定是温度和露点求湿润指数。终究还是英文太菜了+粗心。
#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;
}
给定一个密文和明文,但是这个密文对应的明文不一定就是这个明文。题目要求就是判断这个密文是不是正确的(或者可以理解为这个明文是不是正确的)。
明文先通过凯撒密码(置换密码)进行加密,再通过数列密码进行加密。一开始我的思路是,先求出这个明文对应的凯撒密码,然后再找出这些字母所有可能顺序,然后一个个比对。但是明显这样时间必然会超时。
题目中没有给出数列密码对应的顺序,就当然不能推出对应的数列密码。所以这条路是不通的。
后来想到,可以不比对字符列,直接比较频数列。先将字母映射到整形数组中去,然后进行比较,如果都一样,则说明两个是对应的。输出YES就行。
#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;
}
有条走廊,两边是各200个房间,走廊太小了只能够移动一张桌子,其他桌子不能够过。可以同时移动桌子,但是不能占用同一条房间面前的走廊。一个房间移动到另外一个房间的时间是10min。
给定T个测试用例,其中N个移动对象。求出最短的移动时间。
其实就是求给出的例子中,有没有重叠的部分,重叠了几次。例如样例中的(10,100)(20,80)(30,50),其中的30-50该区域三个区间都有包括,总共重叠了三次,所以直接3*10就是最短的时间。
用数组来标示区间,我的代码中是直接,很暴力,可以稍微优化一点,给的房间号+1再除以2,这样循环次数可以减少。
注意,题目中没有给定说先给出的那个数会比后面的数小,所以需要判断。不然会wa。
#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;
}
给定字符串,求每个字符值的和。
这道题太水了,没啥好说的。注意有读取空格就对了。
#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;
}