c++解题方法与技巧.doc

上传人:夏** 文档编号:558453120 上传时间:2023-03-29 格式:DOC 页数:14 大小:51.95KB
返回 下载 相关 举报
c++解题方法与技巧.doc_第1页
第1页 / 共14页
c++解题方法与技巧.doc_第2页
第2页 / 共14页
c++解题方法与技巧.doc_第3页
第3页 / 共14页
c++解题方法与技巧.doc_第4页
第4页 / 共14页
c++解题方法与技巧.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《c++解题方法与技巧.doc》由会员分享,可在线阅读,更多相关《c++解题方法与技巧.doc(14页珍藏版)》请在金锄头文库上搜索。

1、第35题:明明的随机数(时间限制为:500毫秒) 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。输入格式 Input Format输入文件有2行,第1行为1个正整数,表示所生成的随机数的个数:N第2行有N个用空格隔开的正整数,为所产生的随机数。输出格式 Output Format输出文件也是2行,第1行为1个正整数M,表示不相同的随机数

2、的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。样例输入 Sample Input69 8 8 12 10 10样例输出 Sample Output48 9 10 12#include#include#includeusing namespace std;int main()int n,i,c;cinn;setv;/把数一个个插入到v中set:iterator it/访问for(i=0;ic;v.insert(c);/把c插入到v中n=v.size();coutnendl;for(it=v.begin();it!=v.end();it+)cout(*it) ;/用指针

3、访问coutendl;return 0;#include#includeusing namespace std;int main()Int i,n,a100;cinn;for(i=0;iai;sort(a,a+n);/从小到大排序for(i=0;in;i+)coutai ;int compar(int a,int b) return ab?a:b;sort(a,a+n,compar);a的b次方对c求余 当数很大的时候有公式(ab%c=ab-1*a%c%c )所以有t=a; for(j=2;j=b;j+) a=(a%c)*t;couta%cendl;cin.getline用法例题2126(统计

4、难题)此函数是按行读取,其语法为:cin.getline(字符指针,字符个数N,结束符);功能是:一次读取多个字符(包括空白字符),直到读满N-1个,或者遇到指定的结束符为止(默认的是0)。例:#include using namespace std;void main()char a10;cin.getline(a,10);for(int i=0;i10;i+)coutai ;输入:1234567890123输出:1 2 3 4 5 6 7 8 9 _ (第10位为空白字符0)C语言中memset函数详解功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的

5、大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作用 法: void *memset(void *s, char ch, unsigned n);程序例:#include #include #include int main(void)char buffer = Hello worldn;printf(Buffer before memset: %sn, buffer);memset(buffer, *, strlen(buffer) );printf(Buffer after memset: %sn, buffer);return 0;输出结果:Buffer before mems

6、et: Hello worldBuffer after memset: *memset函数详细说明1。void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2。例子main()char *s=Golden Global View;clrscr();memset(s,G,6);/貌似这里有点问题/printf(%s,s);getchar();return 0;【这个问题相当大,程序根本就运行不下去了,你这里的S志向的是一段只读的内存,而你memset又试图修改它,所以运行时要出错,修改办法char *s修改为cha

7、r s】3。memset() 函数常用于内存空间初始化。如:char str100;memset(str,0,100);4。memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为memset(a, 0, sizeof(a);memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a100,b50; memcpy(b, a, sizeof(b);注意如用sizeof(a),会造成b的内存地址溢出。strcpy就只能拷贝字符串了,它遇到0就结束拷贝;例:char a100,b50;strcpy(a,b);如用

8、strcpy(b,a),要注意a中的字符串长度(第一个0之前)是否超过50位,如超过,则会造成b的内存地址溢出。5.补充:某人的一点心得memset可以方便的清空一个结构类型的变量或数组。如:struct sample_structchar csName16;int iSeq;int iType;对于变量struct sample_strcut stTest;一般情况下,清空stTest的方法:stTest.csName0=0;stTest.iSeq=0;stTest.iType=0;用memset就非常方便:memset(&stTest,0,sizeof(struct sample_stru

9、ct);如果是数组:struct sample_struct TEST10;则memset(TEST,0,sizeof(struct sample_struct)*10);6。strcpy原型:extern char *strcpy(char *dest,char *src);用法:i nclude功能:把src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。memcpy原型:extern void *memcpy(void *dest, void *src, unsign

10、ed int count);用法:i nclude功能:由src所指内存区域复制count个字节到dest所指内存区域。说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。memset原型:extern void *memset(void *buffer, int c, int count);用法:i nclude功能:把buffer所指内存区域的前count个字节设置成字符c。说明:返回指向buffer的指针。负权数#include#include#includeint main() int n,r,a100,p,j; while(scanf(%d%d,&n,&r)!=E

11、OF) int n1=abs(n); int r1=abs(r); int i=0; memset(a,0,sizeof(a); /通过连除求余得到|n|的|r|进制形式 while(n10) ai=n1%r1; n1/=r1; i+; /以下将|n|的|r|进制形式转化为n的r进制形式。 if(n0) p=1; else p=0; /n0 i-; while(p0) ap+1+; /向ap+1位进1 j=p+1; while(aj=r1) /修改 aj-=r1; j+; aj+; if(ji) /如果长度变长了 i=j; ap=r1-ap; p+=2; for(j=i;j=0;j-) if(aj

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号