A. Hailstone HOTPO
这是一道水题,直接写就ok,直接上代码:
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std ;
const int MAXN = 2005 ;
int n ;
int main()
{
int T ;
scanf("%d" , &T) ;
while (T --)
{
int t , n ;
scanf("%d%d" , &t , &n) ;
int MAX = n ;
int tmp = n ;
while (tmp != 1)
{
if(tmp % 2 == 0)
{
tmp /= 2 ;
}
else
{
tmp = tmp * 3 + 1 ;
if(tmp > MAX)
MAX = tmp ;
}
}
printf("%d %d\n" , t , MAX) ;
}
return 0 ;
}
C.
Pen Counts
题目大意:直接抽象一下,给你一个长度为n的绳子,让你围成一个三角形,要求:
1、三角形的边长必须为整数
2、能够由另一三角形A 旋转得到 三角形B , 则三角形A、B算作一个三角形
解题思路:直接枚举,思考后易得出:考虑由同样的三条边长 a,b,c 能围成几个不同的三角形:
1、当a,b,c组成的三角形是等腰三角形或者等边三角形,那么只能围成 1 个不同的三角形。
2、当a != b 且 b != c 且 a != c 时 ,即围成的是一般三角形时,那么能围成 2 个不同的三角形。
代码如下:
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std ;
void init()
{
int t ;
scanf("%d" , &t) ;
int n ;
scanf("%d" , &n) ;
int ans = 0 ;
int i ;
int tmp1 , tmp2 , tmp3 ;
for(i = 1 ; i <= n ; i ++)
{
tmp1 = (n - i) / 2 ;
tmp2 = n - i - tmp1 ;
while (tmp1 >= i)
{
if(i + tmp1 > tmp2)
{
if(i != tmp1 && tmp1 != tmp2 && i != tmp2)
ans += 2 ;
else
ans ++ ;
tmp1 -- ;
tmp2 ++ ;
}
else
break ;
}
}
printf("%d %d\n" , t , ans) ;
}
int main()
{
int T ;
scanf("%d" , &T) ;
while (T --)
{
init() ;
}
return 0 ;
}
J. Mystery
题目大意:此题是一道找规律题,给你一个字符串s,然后给你 n 个数a1 , a2 , …… , an ,让你输出一个字符串。
解题思路:先求出字符串s的长度len , 定义一个变量tmp = 0 ,读到数a1 时 , tmp = tmp + a1 ,此时若tmp > 0,则要输出的第一个字符即为s[ tmp % len ] ; 若 tmp < 0 ,则进行tmp = tmp + len 直到tmp >= 0 为止 ,输出s[ tmp ] ;接下来读到数a2 , 则tmp = tmp + a2 ,输出字符的方法同上。
请看代码:
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std ;
const int MAXN = 2005 ;
char s[MAXN] ;
int main()
{
int n ;
scanf("%d" , &n) ;
while (n --)
{
int t ;
scanf("%d" , &t) ;
getchar() ;
gets(s) ;
int len = strlen(s) ;
int m ;
scanf("%d" , &m) ;
printf("%d ", t) ;
int tmp = 0 ;
int i ;
for(i = 0 ; i < m ; i ++)
{
int tn ;
scanf("%d" , &tn) ;
tmp += tn ;
if(tmp < 0)
{
int k = tmp ;
while (k < 0)
{
k += len ;
}
printf("%c" , s[k]) ;
}
else
{
printf("%c" , s[tmp % len]) ;
}
}
puts("") ;
}
return 0 ;
}