day 8 模拟和高精度
P1042 [NOIP2003 普及组] 乒乓球 (模拟)
#include<bits/stdc++.h>
using namespace std;
int win[62505];//最多25*2500个字母
int len = 0;
void show(int n){
int w = 0, l = 0;
for(int i=0;i<len;i++){
if(win[i] == 'W') w++;
if(win[i] == 'L') l++;
if((w>=n||l>=n)&&abs(w-l)>=2){
cout<<w<<":"<<l<<endl;
w = l = 0;//一局结束,比分清零
}
}
cout<<w<<":"<<l<<endl;
}
int main()
{
char ch;
while(cin>>ch && ch!='E')
win[len++] = ch;
show(11);
cout<<endl;
show(21);
return 0;
}
P1563 [NOIP2016 提高组] 玩具谜题 (模拟)
面朝圈内的玩具小人, 它的左边是顺时针方向, 右边是逆时针方向;
面向圈外的玩具小人, 它的左边是逆时针方向, 右边是顺时针方向。
#include<bits/stdc++.h>
using namespace std;
int n, m, dir[100005];//朝向(0:圈内;1:圈外)
string name[100005];//名字
int main()
{
cin >> n >> m;
for(int i = 0;i < n; i++){
cin >> dir[i];
cin >> name[i];
} int a, s, ans = 0;//从第一个人开始
for(int i = 0;i < m; i++){//m条指令,到谁从谁数s个
cin >> a >> s;//朝向a,s个人
if(a == 0 && dir[ans] == 0)
ans = (ans + n - s) % n;
else if(a == 0 && dir[ans] == 1)
ans = (ans + s) % n;
else if(a == 1 && dir[ans] == 0)
ans = (ans + s) % n;
else if(a == 1 && dir[ans] == 1)
ans = (ans + n -s) % n;
}
cout << name[ans] << endl;
return 0;
}
P1009 [NOIP1998 普及组] 阶乘之和 (高精 加和乘)
#include<bits/stdc++.h>
using namespace std;
int n, sum[120], jc[120], i, j;//sum:求和 ;jc:求阶乘
int main()
{
cin >> n;
sum[0] = jc[0] = 1;
for(i=2; i<=n; i++){
for(j=0; j<100; j++)
jc[j] *= i;
for(j=0; j<100; j++){
if(jc[j]>=10){
jc[j+1] += jc[j] / 10;
jc[j] %= 10;
}
}
for(j=0; j<100; j++){
sum[j] += jc[j];
if(sum[j]>=10){
sum[j+1] += sum[j] / 10;
sum[j] %= 10;
}
}
}
for(i=100; i>=0 && !sum[i]; i--);//去前导零
for(j=i; j>=0; j--) cout << sum[j];
return 0;
}
试题 基础练习 特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
#include<bits/stdc++.h>
using namespace std;
//判断特殊回文数
int a[7], n, m;
bool isequal(int k, int n){
int sum = 0;
m = 0;
while(k){
a[m] = k % 10;
sum += a[m];
k /= 10;
m++;
}
return (sum == n);
}
bool ishw(int k){
if(m == 5){
if(a[0]==a[4] && a[1]==a[3])
return true;
else return false;
}else{
if(a[0]==a[5] && a[1]==a[4] && a[2]==a[3])
return true;
else return false;
}
}
int main()
{
cin >> n;
for(int i=10000; i<1000000; i++)
if(isequal(i, n))
if(ishw(i))
cout << i << endl;
return 0;
}