scanf

记忆面包之C语言

帅比萌擦擦* 提交于 2020-02-28 15:32:41
字符串的输入 在C语言中,有两个函数可以让用户从键盘上输入字符串,它们分别是: scanf():通过格式控制符%s输入字符串。除了字符串,scanf() 还能输入其他类型的数据。 gets():直接输入字符串,并且只能输入字符串。 但是,scanf() 和 gets() 是有区别的: scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。 gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。换句话说,gets() 用来读取一整行字符串。 #include <stdio.h> int main(){ char str1[30] = {0}; char str2[30] = {0}; char str3[30] = {0}; //gets() 用法 printf("Input a string: "); gets(str1); //scanf() 用法 printf("Input a string: "); scanf("%s", str2); scanf("%s", str3); printf("\nstr1: %s\n", str1); printf("str2: %s\n", str2); printf("str3

2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest

≡放荡痞女 提交于 2020-02-28 05:23:58
2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest A. Fried Fish 题意:有N条鱼,有一个同时可以煎k条鱼的锅,鱼两个面都要煎; 分析:k*2个面要煎,是否有一种方式可以让锅没有空闲,当时我举了几个例子,确实可以找到,没有证明,注意n<k的情况 #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { freopen("INPUT.TXT","r",stdin); freopen("OUTPUT.TXT","w",stdout); int x,y; while(scanf("%d%d",&x,&y)!= EOF) { if(2*x<=y) printf("2\n"); else { if((2*x)%y==0) printf("%d\n",(2*x)/y); else printf("%d\n",(2*x)/y+1); } } return 0; } B. Hanoi tower 题意:用给出的汉诺塔算法,求出第一次相同时的步数; 分析: 网上有一个公式:先求出n层从A到B的步数:d(n)=d(n-1)*2+1 然后:ans(n)= d(n/3*2-1)+d

codeforces每日一题1-10

℡╲_俬逩灬. 提交于 2020-02-27 18:07:13
目录: 1. 1093D. Beautiful Graph(DFS染色) 2.514C - Watto and Mechanism(Tire) 3.69E.Subsegments(STL) 4.25C. Roads in Berland(最短路松弛操作) 5.128B. String Problem (floyd预处理) 6.33C.Wonderful Randomized Sum(思维) 7.1292B.Aroma's Search (暴力+思维) 8.1286 A.Garland(DP) 1093D. Beautiful Graph(DFS染色) 题意: 给你一个一个n个顶点,m条边的无向图,你可以将顶点赋值为1,2,3,现在问你有多少种赋值方案,使得任意一条边的两个顶点权值和为奇数 思路: 由于权值和要为奇数,所有一条边的两个顶点要一个为奇数,一个为偶数,所以就变成了一个染色问题 要注意图并不一定联通,所以答案为每个连通块内(2^(奇数)+2^(偶数))的乘积和-可以由组合数进行推导 如果有任意一个块无法染色,则答案为0 #include<iostream> #include<algorithm> #include<vector> using namespace std; typedef long long ll; const ll mod=998244353; const

PAT Advanced 1030 Travel Plan (30) [Dijkstra算法 + DFS,最短路径,边权]

試著忘記壹切 提交于 2020-02-27 16:25:24
题目 A traveler’s map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to decide the shortest path between his/her starting city and the destination. If such a shortest path is not unique, you are supposed to output the one with the minimum cost, which is guaranteed to be unique. Input Specification: Each input file contains one test case. Each case starts with a line containing 4 positive integers N, M, S, and D, where N (<=500) is the number of cities (and hence the cities are numbered from

C++班级通讯录

我是研究僧i 提交于 2020-02-27 14:16:57
C++实现班级通讯录管理系统 设计流程 本系统基于C++实现班级通讯录管理系统。功能包括增、删、查、改等。通讯录包括的个人信息有姓名、学号、性别、籍贯、政治面貌、手机号、QQ号、宿舍等。主要用到了指针、结构体、遍历链表、文件读取等知识点。 优点 1 . 此系统含有欢迎使用的页面,之后进入功能页面。 2 . 功能设计根据实际情况设计能够最大限度满足现实需求。 3 . 界面简洁易懂,操作简单。 页面效果 完整代码 # include <stdio.h> # include <string.h> # include <stdlib.h> # include <windows.h> typedef struct student //定义结构体 { char name [ 20 ] ; //姓名 char num [ 15 ] ; //学号 char sex [ 10 ] ; //性别 char from [ 20 ] ; //籍贯 char political [ 10 ] ; //政治面貌 char phone [ 15 ] ; //手机号 char QQ [ 15 ] ; //QQ号 char dorm [ 10 ] ; //宿舍 struct student * next ; //结构体指针 } stu ; stu * head ; void print ( ) //主菜单 {

刷题笔记-图-图的遍历

让人想犯罪 __ 提交于 2020-02-27 11:27:23
目录 深度优先遍历(DFS) 邻接表(DFS) 邻接矩阵(DFS) 广度优先遍历(BFS) 邻接表(BFS 无层级统计) 邻接表(BFS 含层级统计) 邻接矩阵(BFS 无层级统计) 邻接矩阵(BFS 含层级统计) 深度优先遍历(DFS) 邻接表(DFS) #include <iostream> #include <vector> using namespace std; const int maxn=10; vector<int> g[maxn]; int n,vis[maxn]; void dfs(int v, int h) { vis[v]=1; // 层级相关处理,或者对当前访问顶点的处理 for(int i=0; i<g[v].size(); i++) { if(vis[g[v][i]]==0) { dfs(g[v][i],h+1); } } } void dfs_travel() { for(int i=0; i<n; i++) { if(vis[i]==0) { dfs(i,1); //起始高度假设为1 // 统计连通分量 } } } int main(int argc,char * argv[]) { scanf("%d",&n); int a,b; for(int i=0;i<n;i++){ scanf("%d %d",&a,&b); g[a].push_back

C语言学习笔记(二)

拥有回忆 提交于 2020-02-27 03:44:32
字符串是一个或者多个字符的序列。C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的字符数组里面。数组由连续的存储单元组成。字符串以字符\0作为结束标记。 scanf函数在遇到空格时会结束输入。 C99和C11标准专门为sizeof运算符的返回类型添加了%zd转换说明,这个对于strlen()同样适用。对于早期的C,sizeof和strlen()返回的实际类型通常是unsigned或unsigned long。 Sizeof的运算对象是类型时,圆括号必不可少,但如果是特定量,则可有可无。 用大写表示符号常量是C语言的一贯的传统。另一个不常用的命名约定是:在名称前加c_或k_前缀表示常量。符号常量的命名规则和变量相同,即可以使用大小写字母、数字和下划线,首字符不能为数字。 #define指令还可以定义字符和字符串常量。前者使用单引号,后者使用双引号。 C90标准新增了const关键字,用于限定一个变量为只读。 float.h和limits.h中定义了有关基本数据类型的一些明示常量,但是要注意的是,编译器要完全支持C99标准才能识别LLONG_MIN标识符。 在最开始的时候,printf()和scanf()函数并非C语言中的I/O函数,C语言将输入输出的实现留给了编译器的作者,这样可以针对不同的机器更好的匹配输入/输出。但后来考虑到兼容性问题

树状数组的整理

依然范特西╮ 提交于 2020-02-27 02:53:43
* 如m = 11000, 则C[m] = C[10100] + C[10110] + C[10111] + A[11000]; 则S[m] = C[11000] + C[10000]; 1.区间求和 向上更新每一个父节点,向下统计每一个子节点之和; 2.查询单点 向上更新区间(update(l,1) /*以左端点为起点++*/ ,update(r+1,-1) /*以右端点为起--*/ ),向下统计子节点之和; 反过来,向下更新向上统计也可以; * 1.树状数组的起点从1开始,到最大值结束,因此终点n不是个数而是最大值; 2.空间复杂度为N,即数组大小为N; 代码模版: void update(int pos,int val) { while(pos <= n) { c[pos] += val; pos += lowbit(pos); } } int sum(int end) { int ret = 0; while(end > 0) { ret += c[end]; end -= lowbit(end); } return ret; } 3.求逆序数   对于一个序列求每个数前面比它大或小的数的个数的总和,将数字离散化得到大小关系用树状数组求和;    /*离散化:当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。*/ 代码模版:    for(int i

bzoj2333[SCOI2011]棘手的操作

99封情书 提交于 2020-02-26 22:58:08
bzoj2333[SCOI2011]棘手的操作 题意: 有N个节点,M个操作:连接两个节点、单个节点的权值增加v、节点所在的连通块的所有节点的权值增加v、所有节点的权值增加v、询问节点当前的权值、询问节点所在的连通块中权值最大的节点的权值、询问所有节点中权值最大的节点的权值。N,M≤300000 题解: 可并堆,虽然听说配对堆非常快,但教程太少了不会写,所以去学了斜堆,比较好写。斜堆实际上是一棵二叉树,核心是合并操作,这是一个递归过程,有点像treap的删除操作。斜堆保证复杂度的方法是每次递归合并右节点,合并完后交换左右节点,使整棵树和splay一样,可以“自动”平衡,也是玄学。要修改整个连通块,打标记就行了。这道题特殊的一点在于询问所有节点权值的最大值,可以用STL的set维护所有连通块的根节点,当连边和修改权值时如果根节点被修改需要维护一下set。 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <set> 5 #define inc(i,j,k) for(int i=j;i<=k;i++) 6 #define maxn 300100 7 #define INF 0x3fffffff 8 using namespace std; 9 10 int fa[maxn],ch

[ICPC训练联盟周赛2][东华大学] UCF Local Contest 2015 题解

眉间皱痕 提交于 2020-02-26 18:17:31
UCF Local Contest 2015 解题报告 东华大学ACM集训队 2020年2月 A.Find the Twins 题目大意 给定长度为10的数列,若数列中只含有18,输出Mack。若只含有17,输出Zack。若同时含有18和17,输出both。若不含18和17,输出none。 题解 签到题,略。 Code #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; int main(){ int N; scanf("%d",&N); while(N--){ bool Mack=false,Zack=false; for(register int i=1;i<=10;++i){ int x;scanf("%d",&x); printf("%d",x); if(i<10) printf(" "); if(x==18) Mack=true; else if(x==17) Zack=true; } printf("\n"); if(Mack && Zack) printf("both\n"); else if(!Mack && !Zack) printf("none\n"); else if(Mack) printf("mack\n");