算法学习和整理
来源:互联网 发布:兰州知豆电动车租赁点 编辑:程序博客网 时间:2024/06/11 08:38
神奇的发现在c语言里面
#include<stdio.h>#include<math.h>int main(){ printf("%d",sqrt(-10)); return 0;}
输出的结果是0
而把%d换成%.0f输出的结果是
换成%.1f 结果则是-1.$
%.2f -1.#J
%3f -1.#IO
%4f -1.#IND
%5f -1.#IND0
%6f -1.#IND00
以此类推 并没有在网上找到合适的解释,周一去问一下钱徽男神:)
把 freopen("input.text","r",stdin);
freopen("output.text","w",stdout);
写在开头可以让scanf从文件input.txt读入,printf从output.txt写入【可能会更加的方便】
学会了修改codeblocks的背景颜色和光标的大小嘿嘿嘿
将键盘输入的大写字母按照键盘上的顺序往左边推一个(但是最左边的变成上一行的右边)
#include<stdio.h>int main(){ char s[] ="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./"; int i,c; while((c = getchar()) != EOF){ for(i = 1; s[i] && s[i]!=c; i++); if(s[i]) putchar(s[i-1]); else putchar(c); } return 0;}
很有意思的是for(i = 1; s[i] && s[i]!=c; i++); 需要好好的注意,用一个for来找到原来的字母的位置,如果找到了,就输出他前面的一个字母。之前我这个傻逼,每次用的都是for+if的组合,发现for第一个分好后面其实只要是一个可以判 断结束标志的语句就可以了,不一定是一定和i有关系
回文串和镜像串的判断
ctype.h头文件的用途
里面有很多函数
isalpha isdigit isprint 判断字符的属性
toupper tolower 转换大小写
(www.cplusplus.com这个网站上面有详细的介绍)
在文件前面的const char* msg[] 的使用
#include<stdio.h>#include<string.h>#include<ctype.h>const char* rev = "A 3 HIL JM O 2TUVWXY51SE Z 8 ";const char* msg[] = {"not a palindrome", "a regular palindrome", "a mirrored string","a mirrored palindrome"};// const char* msg[]常量数组的使用,字符串数组其实是个二维的字符数组char r(char ch) { if(isalpha(ch)) return rev[ch - 'A']; return rev[ch - '0' + 25];}int main() { char s[30]; while(scanf("%s", s) == 1) { int len = strlen(s); int p = 1, m = 1; for(int i = 0; i < (len+1)/2; i++) { if(s[i] != s[len-1-i]) p = 0; //不是回文串 if(r(s[i]) != s[len-1-i]) m = 0; //不是镜像串 } printf("%s -- is %s.\n\n", s, msg[m*2+p]); }//这里写的特别的好,感觉数学真的蛮重要的 return 0;}
生成元
如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求最小
生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。
先将每个数的逆生成元算出来,保存在一个数组里面,然后要求解的时候就去查表就可以了
#include<stdio.h>#include<string.h>#define maxn 100005int ans[maxn];int main(){ int T,n,m=1; memset(ans,0,sizeof(ans)); for( m = 1;m < maxn ;m++){ int x = m,y = m; while(x > 0){y += x%10;x /= 10;} if(ans[y]==0|| m < ans[y] ) ans[y] = m; } scanf("%d",&T); while(T--){ scanf("%d",&n); printf("%d\n",ans[n]); } return 0;}
补码里面没有+0和-0
因为原来是-0的数现在是绝对值最大的负数了(8位的话是-127)
若要计算n位数补码二进制对应的十进制,需要知道每位数对应的数字,除了最高比特外,其他比特的对应数字均和一般二进制相同,即第i位数表示数字2i−1。但最高比特若为1时,其表示数字为 -2n−1,因此若用此方式计算0000 0101表示的数字,其结果为:
1111 1011 (−5) = −128 + 64 + 32 + 16 + 8 + 0 + 2 + 1 = (−27 + 26 + …) = −5
移位运算 x2 等价于 <<1 左移一位
2^8-1 可以写成 (1<<8)-1 注意运算符的优先级
纵横字谜的答案
题目链接
- 算法学习和整理
- KMP 算法 学习 整理
- RMQ 算法 学习整理
- 整理最近学习的算法
- 相关算法学习资源整理
- 算法导论2学习整理
- 机器学习简单算法整理
- PageRank算法学习与整理
- 推荐算法学习-资料整理
- 算法学习(资料整理)
- 算法学习笔记:排序算法整理
- 整理一下算法和数据结构
- 学习研究v_JULY_v整理的微软数据结构和算法面试题
- 学习资料整理和分享。 .
- 一些简单常用算法整理学习 转
- 黑马程序员--MD5算法学习整理
- 算法学习之KMP(模板整理)
- 有趣算法-堆排序学习整理
- React-Native 集成AMap实例
- Android学习11
- poj3468-线段树详解
- 作业:计数器仿真实验
- Ubuntu下切换JDK版本
- 算法学习和整理
- SVN使用教程
- Android学习12
- Form1
- 每天敲一遍的mysql代码
- Android学习13
- hdu 2845 Beans
- Hbase 原理 及其安装
- 2