char

[笔记][中国大学mooc][程序设计与算法(二) 算法基础][枚举][局部枚举法] POJ1222 熄灯问题

一个人想着一个人 提交于 2020-02-26 14:03:06
题目 分析 按照一般的穷举法,一共有30个开关,所以解空间有 2 30 2^{30} 2 3 0 个可能,需要减少枚举数目: 如果存在某个局部,一旦这个局部的状态被确定,那么剩余其他部分的状态只能是确定的一种,或者不多的n种,那么就只需枚举这个局部的状态即可 对于本题目,第一行开关按下的状态可以决定剩余所有的状态,将解空间大小缩小为 2 5 2^{5} 2 5 代码 # include <stdio.h> int solve ( char puzzle [ ] [ 6 ] , char result [ ] [ 6 ] ) { int cnt1 , cnt2 ; for ( cnt1 = 1 ; cnt1 < 5 ; cnt1 ++ ) { for ( cnt2 = 0 ; cnt2 < 6 ; cnt2 ++ ) { if ( puzzle [ cnt1 - 1 ] [ cnt2 ] == 1 ) { result [ cnt1 ] [ cnt2 ] = 1 ; puzzle [ cnt1 - 1 ] [ cnt2 ] = ! puzzle [ cnt1 - 1 ] [ cnt2 ] ; puzzle [ cnt1 ] [ cnt2 ] = ! puzzle [ cnt1 ] [ cnt2 ] ; if ( cnt1 + 1 < 5 ) puzzle [ cnt1 + 1 ] [

将'const'用于功能参数

妖精的绣舞 提交于 2020-02-26 14:00:20
你用 const 走多远? 您只是在必要时使函数为 const 还是在整个过程中都使用它? 例如,假设有一个简单的变量,它带有一个布尔值: void SetValue(const bool b) { my_val_ = b; } 那个 const 实际上有用吗? 我个人选择广泛使用它,包括参数,但是在这种情况下,我想知道它是否值得? 我也惊讶地发现您可以从函数声明中的参数中省略 const ,但可以将其包含在函数定义中,例如: .h文件 void func(int n, long l); .cpp文件 void func(const int n, const long l) 是否有一个原因? 对我来说似乎有点不寻常。 #1楼 从API的角度来看,多余的const是不利的: 在代码中为值传递的内在类型参数添加多余的const会使 您的API混乱, 而对调用者或API用户没有任何有意义的承诺(这只会妨碍实现)。 当不需要时,API中太多的“ const”就像“ 哭泣的狼 ”,最终人们会开始忽略“ const”,因为它遍地都是,在大多数时候没有任何意义。 API中额外的const的“ reducio ad absurdum”参数对于前两点是好的,那就是如果更多的const参数是好的,那么每个可以有const的参数都应该有const。 实际上,如果确实如此,您希望const成为参数的默认值

以命令行的格式读取音频文件信息,并将读取的内容写到输出文件中

╄→гoц情女王★ 提交于 2020-02-26 13:56:15
文章目录 c语言实现代码 运行结果 总结: 输入: wavinfo -i xxx.wav -o output.txt 输出:(格式规范)xxx=yyy rate(Hz)=16000 length=32000 ch=2 depth(bit)=16 c语言实现代码 ////命令行输入参数,读取wav文件的信息 # include <stdio.h> # include <stdint.h> /*struct类型里面我用的是uint32_t等类型,而不是传统的int,short等等 这些类型是由stdint.h头文件提供*/ # include <stdlib.h> # include <windows.h> typedef struct wave_tag //声明结构体的相关参数 { char ChunkID [ 4 ] ; // "RIFF"标志 unsigned int ChunkSize ; // 文件长度(WAVE文件的大小, 不含前8个字节) char Format [ 4 ] ; // "WAVE"标志 char SubChunk1ID [ 4 ] ; // "fmt "标志 unsigned long int SubChunk1Size ; // 过渡字节(不定) unsigned short int AudioFormat ; // 格式类别

C语言-黑白棋(人机对战)

徘徊边缘 提交于 2020-02-26 13:04:25
1 #include <stdio.h> 2 #include <conio.h> 3 /* 4 分析:要实现黑白棋的关键在于由计算机下棋时,智能判断最佳下棋位置。具体思路如下: 5 1.定义一个二维数组chessboard[8][8],用于保存黑白双方所下棋子的位置。如果数组元素为0,表示该单元格为落子;如果是-1,表示该单元格是黑子;如果是1,则表示该单元格是白子。 6 2.当一方下棋时,先检查是否有位置可下,如果没有就让对手下,如果有就让玩家或计算机下。 7 3. 若玩家下,需要等待玩家输入下子坐标。 8 4.若计算机下,程序需对棋盘的空位置进行判断,找出最佳的下子位置。 9 5.重复步骤2~4,直到棋盘已满或双方都不能下子时结束。 10 */ 11 12 void Output(char chessboard[][8]); //显示棋盘中的下子情况 13 int Check(char chessboard[][8],int moves[][8],char player);//检查一方是否有位置下子 14 void PlayStep(char chessboard[][8],int row,int col,char player);//在指定位置下棋 15 void AutoPlayStep(char chessboard[][8],int moves[][8],char

C++多字节与Unicode之间的转化

℡╲_俬逩灬. 提交于 2020-02-26 11:58:47
Unicode Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 char数据类型 C程序中使用char数据类型来定义和存储字符和字符串 下面的声明定义和初始化一个包含单一字符的变量: char c = 'A' ; 定义一个指向字符串的指针: char * p ; 因为Windows是一个32位的操作系统,指针变量p需要4个字节的存储空间。还可以如下初始化一个指向字符串的指针: char * p = "Hello!" ; 更宽的字符 使用Unicode或者是宽字符并不会改变C语言中的字符数据类型。char类型继续代表一个字节的存储空间,而且sizeof(char)继续返回1.理论上来说,C语言中的一个字节可能长于8位,但是对于大多数人来说,一个字节(因而就是一个char)是8位宽。 C语言中的宽字符是基于wchar_t数据类型的。这个数据类型被定义在多个头文件中,包括WCHAR.H,如下所示: typedef unsingned short wchar_t ; 因此,wchar_t数据类型和一个无符号短整型一样,都是16位宽。 可以用下面的语句来定义一个包含单个宽字符的变量

剑指offer 面试50题

时光总嘲笑我的痴心妄想 提交于 2020-02-26 09:41:49
面试50题: 题目:第一个只出现一次的字符 题:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置。 解题思路一:利用Python特性 # -*- coding:utf-8 -*- class Solution: def FirstNotRepeatingChar(self, s): # write code here if not s or len(s)<=0: return -1 for i in s: if s.count(i)==1: return s.index(i) return -1 解题思路二:自定义一个哈希表,键值key为字符,值value为该字符出现的次数。 # -*- coding:utf-8 -*- class Solution: def FirstNotRepeatingChar(self, s): # write code here if len(s)<=0: return -1 char_dict={} for i in s: if i in char_dict: char_dict[i]+=1 else: char_dict[i]=1 for index,value in enumerate(s): if char_dict[value]==1: return index return -1

c++ char转换成string

ε祈祈猫儿з 提交于 2020-02-26 09:39:35
第一种:利用赋值号直接赋值 char a = 40; string b = a; /* 错误。因为string是一个指针,存储的值是所指向的地址,而char型存储的是内容,所以不可以直接用赋值号赋值 */ const char* a = "hello"; string b = a; //正确 const char[] a = "hello"; string b = a; //正确 第二种:利用sting构造函数 查看一下string的构造函数: 1 string(); 2 3 string (const string& str); 4 5 string (const string& str, size_t pos, size_t len = npos); 6 7 string (const char* s); 8 9 string (const char* s, size_t n); 10 11 string (size_t n, char c); 12 13 template <class InputIterator> 14 string (InputIterator first, InputIterator last); 15 16 string (initializer_list<char> il); 17 18 string (string&& str) noexcept;

实验五

冷暖自知 提交于 2020-02-26 06:25:22
// 练习:使用二分查找,在一组有序元素中查找数据项 // 形参是数组,实参是数组名 #include <stdio.h> #include <stdlib.h> const int N=5; int binarySearch(int x[], int n, int item); // 函数声明 int main() { int a[N]={2,7,19,45,66}; int i,index, key; printf("数组a中的数据:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); printf("输入待查找的数据项: "); scanf("%d", &key); // 调用函数binarySearch()在数组a中查找指定数据项item,并返回查找结果给index // 补足代码① index=binarySearch(a,N,key); if(index>=0) printf("%d在数组中,下标为%d\n", key, index); else printf("%d不在数组中\n", key); system("pause"); return 0; } //函数功能描述: //使用二分查找算法在数组x中查找特定值item,数组x大小为n // 如果找到,返回其下标 // 如果没找到,返回-1 int

生成给定字符串的所有排列

谁说我不能喝 提交于 2020-02-26 03:14:00
找到字符串的所有排列的一种优雅方法是什么。 例如 ba ,将是 ba 和 ab ,但是 abcdefgh 呢? 是否有任何Java实现示例? #1楼 在这里和其他论坛中提供的所有解决方案中,我最喜欢Mark Byers。 这种描述实际上使我自己思考并编写代码。 太糟糕了,因为我是新手,所以我无法投票赞成他的解决方案。 无论如何,这是我对他的描述的实现 public class PermTest { public static void main(String[] args) throws Exception { String str = "abcdef"; StringBuffer strBuf = new StringBuffer(str); doPerm(strBuf,0); } private static void doPerm(StringBuffer str, int index){ if(index == str.length()) System.out.println(str); else { //recursively solve this by placing all other chars at current first pos doPerm(str, index+1); for (int i = index+1; i < str.length(); i++

C++编程关键路径(一)

懵懂的女人 提交于 2020-02-26 03:05:13
最近看了这本由中国水利水电出版社出版的这本书,作者是梁永军,感觉里面的东西对我个人来说挺有用的,所以总结一下,也算是自己复习一下 第一章:C语言关键知识 1、关于内存: (1)栈:是用于那些在编译期间就能确定存储大小的变量的存储区,在函数作用域内创建,离开作用域后自动销毁。通常存储的是局部变量、函数参数等。存储区域一般是相邻的。 (2)堆:是用于那些在编译期间不确定存储大小的变量的存储区,存储空间一般是不连续的,由malloc(new)和free(delete)来申请和释放内存, (3)全局(静态存储区):在编译期间就能确定变量占用内存的大小,一般是全局变量和静态变量。 (4)常量存储区:存放的是常量,程序运行期间,全局可见,不允许被修改。 变量分为左值和右值,对于:char* p=”hello world”;中,左值是局部指针变量p,存储于函数栈上,右值是字符串常量”hello world”,存储于常量存储区。 2、函数的参数传值和传址 参数传值:把实参的值复制到函数运行时分配给函数的参数存储区中,函数不会访问调用函数的实参,被调用函数处理的是实参在本地的拷贝,这些拷贝值存储在函数的栈中。 参数传址:把实参的地址(指针或引用)传入函数,被调用的函数直接操作的是变量的地址,目的有两个:一个是改变传入的变量的值,一个是提高效率,减少参数传值过程中需要的复制过程。 在实际开发中