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 ;
}