openjudge1.6 题目合集(08~15)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openjudge1.6 题目合集(08~15)相关的知识,希望对你有一定的参考价值。
08-石头剪刀布
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[10001]; int b[10001]; int now_a[100001]; int now_b[100001]; int ying_a; int ying_b; int ping; int main() { int n;//总共进行了n轮 int a_z,b_z;//a,b的出拳周期 cin>>n>>a_z>>b_z; for(int i=1;i<=a_z;i++) { cin>>a[i]; now_a[i]=a[i]; } for(int i=1;i<=b_z;i++) { cin>>b[i]; now_b[i]=b[i]; } int now=1; for(int i=a_z+1;i<=n;i++) { a[i]=now_a[now]; if(now==a_z) { now=1; } else now++; } for(int i=a_z+1;i<=n;i++) { a[i]=now_a[now]; if(now==a_z) { now=1; } else now++; } for(int i=b_z+1;i<=n;i++) { b[i]=now_b[now]; if(now==b_z) { now=1; } else now++; } for(int i=1;i<=n;i++)// 0石头 2剪刀 5布 { if(a[i]==0&&b[i]==0) ping++; if(a[i]==0&&b[i]==2) ying_a++; if(a[i]==0&&b[i]==5) ying_b++; if(a[i]==2&&b[i]==0) ying_b++; if(a[i]==2&&b[i]==2) ping++; if(a[i]==2&&b[i]==5) ying_a++; if(a[i]==5&&b[i]==0) ying_a++; if(a[i]==5&&b[i]==2) ying_b++; if(a[i]==5&&b[i]==5) ping++; } if(ying_a>ying_b) { cout<<"A"; } else if(ying_a<ying_b) { cout<<"B"; } else cout<<"draw"; return 0; }
09-向量点积计算
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[10001];
int b[10001];
int tot[10001];
long long int ans;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
cin>>b[i];
}
for(int i=1;i<=n;i++)
{
tot[i]=a[i]*b[i];
}
for(int i=1;i<=n;i++)
{
ans=tot[i]+ans;
}
cout<<ans;
return 0;
}
10-大整数加法
#include<iostream> #include<cstdio> #include<cstring> using namespace std; char a[100001]; char b[100001]; char c[100001]; int a1[100001]; int b1[100001]; int c1[100001]; int main() { scanf("%s",&a); scanf("%s",&b); int la=strlen(a); int lb=strlen(b); for(int i=0;i<la;i++) a1[i]=a[la-i-1]-‘0‘; for(int i=0;i<lb;i++) b1[i]=b[lb-i-1]-‘0‘; int x=0; int i=0; while(i<la||i<lb) { c1[i]=a1[i]+b1[i]+x; x=c1[i]/10; c1[i]=c1[i]%10; i++; } c1[i]=x; while(1) { if(c1[i]==0&&i>=1) i--; else break; } for(int j=i;j>=0;j--) cout<<c1[j]; return 0; }
11-大整数减法
#include<iostream> #include<cstdio> #include<cstring> using namespace std; char a[10001]; char b[10001]; int a1[10001]; int b1[10001]; int c[10001]; int main() { scanf("%s",&a); scanf("%s",&b); int la=strlen(a); int lb=strlen(b); if(lb>la||(la==lb&&strcmp(a,b)<0)) { swap(a,b); cout<<"-"; } la=strlen(a); lb=strlen(b); for(int i=0;i<la;i++) { a1[i]=a[la-i-1]-‘0‘; } for(int i=0;i<lb;i++) { b1[i]=b[lb-i-1]-‘0‘; } int i=0;//当前位数 while(i<la) { if(a1[i]-b1[i]<0) { a1[i]=a1[i]+10; a1[i+1]--; } c[i]=a1[i]-b1[i]; i++; } while(1) { if(c[i]==0&&i>=1) i--; else break; } for(int j=i;j>=0;j--) cout<<c[j]; return 0; }
12-计算2的n次方
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> using namespace std; int n; int ans[100001]={0,2}; int lans=1; int main() { int n; cin>>n; if(n==0) { cout<<"1"; return 0; } else if(n==1) { cout<<"2"; return 0; } else if(n==3) { cout<<"8"; return 0; } for(int i=1;i<=n-1;i++) { int x=0; for(int j=1;j<=lans;j++) { ans[j]=ans[j]*2+x; x=ans[j]/10; if(x>0) lans++; ans[j]=ans[j]%10; } } int flag=0; for(int i=lans-1;i>=1;i--) { if(ans[i]==0&&flag==0) continue; else flag=1; cout<<ans[i]; } return 0; }
13-大整数的因子
#include<iostream> #include<cstdio> #include<cstring> using namespace std; char a1[10001]; int a[10001]; int c[10001]; int tot; int main() { gets(a1); int la=strlen(a1); for(int i=0;i<la;i++) { a[i+1]=a1[i]-48; } int x=0;//商 for(int j=2;j<=9;j++) { memset(c,0,sizeof(c)); x=0; for(int i=1;i<=la;i++) { c[i]=(x*10+a[i])/j; x=(x*10+a[i])%j; } if(x==0) { tot++; cout<<j<<" "; } } if(tot==0) { cout<<"none"; } /*int lc=1; for(int i=1;i<=la;i++) { if(c[i]==0&&lc<la) lc++; else break; } for(int i=lc;i<=la;i++) cout<<c[i]; cout<<endl; cout<<x;*/ return 0; }
14-求10000以内n的阶乘
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; int a[1000001]={1}; int ans[10000001]={1}; char n[1001]; int en[1001]; int main() { int n; cin>>n; int lans=1; int x=0; for(int i=1;i<=n;i++) { for(int j=0;j<lans;j++) { a[j]=a[j]*i+x; x=a[j]/10; if(x>0&&j==lans-1) lans++; a[j]=a[j]%10; } } int flag=0; for(int i=lans;i>=0;i--) { if(a[i]==0&&flag==0) continue; else flag=1; cout<<a[i]; } return 0; }
15-阶乘和
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; int a[10001]={1}; int ans[100001]={0}; char n[1001]; int en[1001]; int lans=1; int la=1; int x; int main() { int n; cin>>n; int x=0; for(int i=1;i<=n;i++)//寻找每一个数 { memset(a,0,sizeof(a)); a[0]=1; for(int k=1;k<=i;k++)//求阶乘 { for(int j=0;j<la;j++) { a[j]=a[j]*k+x; x=a[j]/10; if(x>0&&j==la-1) la++; a[j]=a[j]%10; } } int l=0; x=0; while(l<=la||l<=lans) { ans[l]=ans[l]+a[l]+x; x=ans[l]/10; if(x>0) lans++; ans[l]=ans[l]%10; l++; } } int flag=0; for(int i=lans;i>=0;i--) { if(ans[i]==0&&flag==0) continue; else flag=1; cout<<ans[i]; } return 0; }
以上是关于openjudge1.6 题目合集(08~15)的主要内容,如果未能解决你的问题,请参考以下文章