题目列表 > A + B
时间限制: 1000ms 内存限制: 1024MB
描述
输入两个正整数A和B, 求A+B的值
输入
两个正整数A, B
输出
A+B的和
对于小数据, 0 < A, B <= 10; 对于大数据, 0 < A, B <= 10100- 样例输入
-
2 3
- 样例输出
-
5
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 5 using namespace std; 6 7 char str1[110], str2[110]; 8 int a[110], b[110]; 9 10 int main() 11 { 12 while(scanf("%s%s", str1, str2) != EOF) 13 { 14 int len1 = strlen(str1); 15 int len2 = strlen(str2); 16 memset(a, 0, sizeof(a)); 17 memset(b, 0, sizeof(b));; 18 for(int i = len1-1, j = 0; i >= 0; --i) 19 a[j++] = str1[i] - '0'; 20 for(int i = len2-1, j = 0; i >= 0; --i) 21 b[j++] = str2[i] - '0'; 22 for(int i = 0, t = 0; i < 110; ++i) 23 { 24 t += a[i] + b[i]; 25 a[i] = t % 10; 26 t /= 10; 27 } 28 int i = 110; 29 while(a[--i] == 0); 30 for(; i >=0; --i) 31 printf("%d", a[i]); 32 printf("\n"); 33 } 34 return 0; 35 }
题目列表 > 石头剪刀布
时间限制: 1000ms 内存限制: 1024MB
描述
石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。
一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期的。请问,小A和小B比了N轮之后,谁赢了?
输入
输入的第一行包含一个整数K,表示K组测试数据。
之后的每组测试数据包含三行。第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。第二行包含NA个整数,表示小A出拳的规律,第三行包含NB个整数,表示小B出拳的规律。其中,0表示“石头”,2表示“剪刀”,5表示“布”。
对于小数据,0 < K,N,NA,NB <= 10;对于大数据,0 < K,N,NA,NB <= 100;
输出
对于每组测试数据,输出一行。如果小A赢了,输出A;如果小B赢了,输出B;如果两人打平,输出draw。
提示
对于第一组测试数据,猜拳过程为:
A:0 2 5 0 2 5 0 2 5 0
B:0 5 0 2 0 5 0 2 0
5
所以A赢了4轮,B赢了2轮,双方打平4轮,所以A赢了。
对于第二组测试数据,猜拳过程为:
A:2 0 5 2 0
B:0 2 5 0
2
所以A赢了2轮,B赢了2轮,双方打平1轮,所以最终打平了。
- 样例输入
-
2 10 3 4 0 2 5 0 5 0 2 5 3 3 2 0 5 0 2 5
- 样例输出
-
A draw
代码如下:1 #include <cstdio> 2 #include <iostream> 3 4 using namespace std; 5 6 int scorea, scoreb; 7 void judge(int a, int b) 8 { 9 if(!(a^b)) 10 return; 11 if(a == 0) 12 { 13 if(b == 2) 14 ++scorea; 15 else 16 ++scoreb; 17 } 18 else if(a == 2) 19 { 20 if(b == 0) 21 ++scoreb; 22 else 23 ++scorea; 24 } 25 else 26 { 27 if(b == 0) 28 ++scorea; 29 else 30 ++scoreb; 31 } 32 } 33 34 int main() 35 { 36 int T, n, na, nb; 37 int a[105], b[105]; 38 scanf("%d", &T); 39 while(T--) 40 { 41 scorea = scoreb = 0; 42 scanf("%d%d%d", &n, &na, &nb); 43 for(int i = 0; i < na; ++i) 44 scanf("%d", &a[i]); 45 for(int i = 0; i < nb; ++i) 46 scanf("%d", &b[i]); 47 for(int i = 0; i < n; ++i) 48 judge(a[i%na], b[i%nb]); 49 if(scorea > scoreb) 50 printf("A\n"); 51 else if(scorea < scoreb) 52 printf("B\n"); 53 else 54 printf("draw\n"); 55 } 56 return 0; 57 }
题目列表 > 踩方格
时间限制: 1000ms 内存限制: 1024MB
描述
有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
b. 走过的格子立即塌陷无法再走第二次;
c. 只能向北、东、西三个方向走;
请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。输入
允许在方格上行走的步数n
输出
计算出的方案数量
对于小数据1 <= n <= 20; 对于大数据1 <= n <= 100.- 样例输入
-
2
- 样例输出
-
7
代码如下:
这道题由于数据量很大,暂时还没有想到如何处理大数据的问题解题思路:
因为走过之后的格子是不能再走的,所以如果第k步是往北走的,那么第 k+1 步可以往
三个方向走如果第k步是往东(往西)走的,那么第 k+1 步只能往北或者往东
(往北或者往西)走两种可能
a[i] 记录走第i步是往北走的个数
b[i] 记录走第i步是往东或者者西时候的个数1 #include <cstdio> 2 #include <iostream> 3 4 using namespace std; 5 6 long long a[105], b[105]; 7 8 void fun() 9 { 10 a[0] = 1; 11 b[0] = 0; 12 for(int i = 1; i <= 100; ++i) 13 { 14 a[i] = a[i-1] + b[i-1]; 15 b[i] = 2 * a[i-1] + b[i-1]; 16 } 17 } 18 int main() 19 { 20 int n; 21 fun(); 22 while(~scanf("%d", &n)) 23 { 24 printf("%lld\n", a[n] + b[n]); 25 } 26 return 0; 27 }