IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 算法竞赛入门经典 -> 正文阅读

[C++知识库]算法竞赛入门经典

P79 侩子手问题

#include<stdio.h>
#include<string.h>
#define maxn 100

int left, chance;  //还需要猜left个位置,错chance次后就会输 
char s[maxn], s2[maxn];  //答案是字符串s,玩家猜的字母序列是s2 
int win, lose;  //win=1表示已经赢了;lose=1表示已经输了 

void guess(char ch){
	int bad = 1;
	for(int i = 0; i < strlen(s); i++){
		if(s[i] == ch){
				left--;
				s[i] = ' ';
				bad = 0;
			}
	}
	if(bad) --chance;
	if(!chance) lose = 1;
	if(!left) win = 1;	
}

int main(){
	int rnd;
	while(scanf("%d%s%s", &rnd, s, s2) == 3 && rnd != -1){
		printf("Round %d\n", rnd);
		win = lose = 0;  //求解一组新数据之前要初始化 
		left = strlen(s);
		chance = 7;
		for(int i = 0; i < strlen(s2); i++){
			guess(s2[i]);  //猜一个字母 
			if(win || lose) break;  //检查状态 
		}
		//根据结果进行输出 
		if(win) printf("You win.\n");
		else if(lose) printf("You lose.\n");
		else printf("You chickened out.\n"); 
	}
	return 0;
}

P82 救济金发放

n个人站一圈,逆时针编号为1~n。有两个官员,A从1开始逆时针数,B从n开始顺时针数。在每一轮中,官员A数k个就停下来,官员B数m个就停下来(注意有可能停在同一个人身上)。接下来被选中的官员(1个或2个)离开队伍。
输入n,k,m输出每轮里被选中的人的编号。

#include<stdio.h>
#define maxn 25

int n, k, m, a[maxn];

//逆时针走t步,步长是d(1表示顺时针走),返回新位置
int go(int p, int d, int t){
	while(t--){
		do{
			p = (p+d+n-1) % n + 1;
		}while(a[p] == 0);  //走到下一个非0数字 
	}
	return p; 
} 

int main(){
	while(scanf("%d%d%d", &n, &k, &m) == 3 && n){
		for(int i = 1; i <= n; i++) a[i] = i;
		int left = n;  //还剩下的人数
		int p1 = n, p2 = 1;
		while(left){
			p1 = go(p1, 1, k);
			p2 = go(p2, -1, m);
			printf("%3d", p1);left--;
			if(p2 != p1) {
				printf("%3d", p2);left--;
			}
			a[p1] = a[p2] = 0;
			if(left) printf(",");
		} 
		printf("\n");
	}
	return 0;
}

第五章 C++与STL入门

C++版框架

C++版的“a+b程序”

#include<cstdio>

int main(){
	int a, b;
	while(scanf("%d%d", &a, &b) == 2) printf("%d\n", a+b);
	return 0;
}

考虑这样的题目,输入数据每行包含若干个以空格隔开的整数,输出每行中所有整数之和

#include<iostream>
#include<string>
#include<sstream>

using namespace std;

int main(){
	string line;
	while(getline(cin, line)){
		int sum = 0, x;
		stringstream ss(line);
		while(ss >> x) sum += x;
		cout << sum << "\n";
	}
	return 0;
}

首先用getline函数读一行数据(相当于C语言中的fgets,但由于使用了string类,无须指定字符串最大长度),然后用这一行创建一个“字符串流”——ss。接下来只需像读取cin一样读取ss即可。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:19:22  更:2021-08-01 14:20:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/1 19:02:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码