初步瞭解java點陣圖:BitSet
阿新 • • 發佈:2021-01-06
洛谷1328生活大爆炸版石頭剪刀布
這是它的遊戲規則:贏的人積1分,輸和平局積0分
這個題思路是週期找對應的情況,
依舊是學習C++,
#include <iostream> #include <cstdio> using namespace std; int map[5][5] = {{0,-1,1,1,-1}, {1,0,-1,1,-1}, {-1,1,0,-1,1}, {-1,-1,1,0,1}, {1,1,-1,-1,0}}; int a[201],b[201]; int main(){ int n ,na, nb; while(scanf("%d%d%d",&n,&na,&nb)==3){ for(int i=0;i<na;i++) scanf("%d",&a[i]); for(int i=0;i<nb;i++) scanf("%d",&b[i]); int suma=0,sumb=0; int ja=-1,jb=-1; for(int i=0;i<n;i++){ ja=(ja+1)%na; jb=(jb+1)%nb; switch(map[a[ja]][b[jb]]) { case -1: sumb++; break; case 1: suma++; break; } } printf("%d %d\n",suma,sumb); } return 0; }
貼個在題解中看到的用c寫的程式碼,
#include<stdio.h>
int fa,fb;
int p[55];
int main()
{
int N,Na,Nb,na[1000],nb[1000];
scanf("%d%d%d",&N,&Na,&Nb);
p[0]=p[11]=p[22]=p[33]=p[44]=2;
p[20]=p[30]=p[31]=p[42]=p[43]=1;
for(int i=1;i<5;++i)
for(int j=0;j<i;++j)
p[ j*10+i]=!p[i*10+j];//對摺,贏變輸,輸變贏
for(int i=0;i<Na;i++)
scanf("%d",&na[i]);//甲出手週期
for(int i=0;i<Nb;i++)
scanf("%d",&nb[i]);//乙出手週期
for(int i=0;i<N;i++)
{
int a=i%Na,b=i%Nb;//到甲的週期的a個動作和乙週期的第b個動作
int k=p[na[a]*10+nb[b]];//判斷
if (k==0)
fa++;//表甲贏+1
if(k==1)
fb++;//乙贏+1
}
printf("%d %d",fa,fb);
return 0;
}