当前位置: 首页 > news >正文

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

相关文章:

  • Go语言常用条件判断空值逻辑
  • Kafka Producer Retries Idempotence 原理
  • 从零开始,开启属于你的 RTE 漫游之旅!丨漫游指南 x 即将启航
  • Fabric.js 元素被遮挡的部分也可以操作
  • 太阳能电池板自动清洗机器人的制作分享
  • electron:获取MAC地址
  • Kafka工作流程简介
  • Web漏洞扫描篇-Nessus使用
  • 移动边缘网络环境中的数据同步方法
  • shell脚本编写语法详解
  • 浅谈冯诺依曼体系,操作系统和进程概念
  • [洛谷]P2234 [HNOI2002]营业额统计
  • golang 协程的实现原理
  • Spring 中使用Nacos服务发现
  • 字符串尾部匹配-指针
  • 1. SpringMVC概述与入门
  • 接口自动化测试(Python+Requests+Unittest)
  • MMIM(2021 EMNLP)分级互信息最大化
  • 万德L2接口怎样复权股票数据?
  • 动态规划|最短Hamilton路径