算法竞赛入门经典 第三章 学习笔记
2017-01-14 21:59
471 查看
例题3-1 开灯问题
例题3-2 蛇形填数
例题3-3
习题3-4 回文串
3.4.1
必要的存储量
下面哪些题目可以不借助数组
输入一些数,统计个数……肯定不用
输入一些数,求最大值最小值平均数……肯定不用
输入一些数,哪两个数最接近……这个应该要用吧?。。
输入一些数,求第二大的值……这个可以不用
输入一些数,求方差……应该要用
输入一些数,统计不超过平均数的个数……应该要用
#include <iostream> using namespace std; signed char light[1000+10]; int main() { int i,j,n,k; cin>>n>>k; for(i=0;i<1000+10;i++) light[i] = -1; for(i=1;i<=k;i++) { for(j=1;j<=n;j++) { if(j%i==0) { light[j-1] = -light[j-1]; } } } cout<<1; for(i=2;i<=n;i++) { if(light[i-1]==1) cout<<' '<<i; } cout<<endl; return 0; }
例题3-2 蛇形填数
#include <iostream> #include <cstring> #include <iomanip> using namespace std; int main() { int a[10][10]; int n,cur,x,y,i,j; cin>>n; memset(a,0,sizeof(a)); cur = a[x=0][y=n-1] = 1; while(cur<n*n) { while(x+1<n&&!a[x+1][y]) a[++x][y] = ++cur; while(y-1>-1&&!a[x][y-1]) a[x][--y] = ++cur; while(x-1>-1&&!a[x-1][y]) a[--x][y] = ++cur; while(y+1<n&&!a[x][y+1]) a[x][++y] = ++cur; } for(i=0;i<n;i++) { for(j=0;j<n;j++) { cout<<setw(3)<<a[i][j]; } cout<<endl; } }
例题3-3
#include <iostream> #include <cstring> #include <iomanip> using namespace std; int main() { int abc,de,x,y,z,i,cnt=0; char in[20],buf[100]; cin>>in; for(abc=100;abc<1000;abc++) { for(de=10;de<100;de++) { x = abc*(de%10); y = abc*(de/10); z = abc*de; sprintf(buf,"%d%d%d%d%d",x,y,z,abc,de); for(i=0;i<strlen(buf);i++) { if(strchr(in,buf[i])==NULL) break; } if(i==strlen(buf)) { cnt++; cout<<'<'<<cnt<<'>'<<endl; cout<<setw(5)<<abc<<endl; cout<<'X'<<setw(4)<<de<<endl; cout<<"-----"<<endl; cout<<setw(5)<<x<<endl<<y<<endl; cout<<"-----"<<endl; cout<<z<<endl<<endl; } } } cout<<"The number of solutions = "<<cnt<<endl; return 0; }
习题3-4 回文串
#include <iostream> #include <cstring> #include <cctype> using namespace std; char in[5000+10],buf[5000+10]; int s[5000+10]; int main() { int l,i,j=0,k,max=0,pos1=0,pos2=0; cin.getline(in,5000+10); l = strlen(in); for(i=0;i<l;i++) { if(isalpha(in[i])) { buf[j] = toupper(in[i]); s[j] = i; j++; } } l = strlen(buf); for(i=0;i<l;i++) { for(j=l-1;j>i;j--) { for(k=0;k<(j-i);k++) { if(buf[k+i]!=buf[j-k]) break; } if(k==j-i&&j-i>max) { max = j-i; pos1 =s[i]; pos2 = s[j]; } } } if(max==0) { cout<<"no string found"; return -1; } for(i=pos1;i<=pos2;i++) cout<<in[i]; cout<<endl; return 0; }
3.4.1
必要的存储量
下面哪些题目可以不借助数组
输入一些数,统计个数……肯定不用
输入一些数,求最大值最小值平均数……肯定不用
输入一些数,哪两个数最接近……这个应该要用吧?。。
输入一些数,求第二大的值……这个可以不用
输入一些数,求方差……应该要用
输入一些数,统计不超过平均数的个数……应该要用
相关文章推荐
- 【算法竞赛入门经典】第三章:数组和字符串 代码和笔记
- 【算法竞赛入门经典第二版学习】第三章习题
- 【算法竞赛入门经典】【第三章】课后习题(第二部分)
- [算法]算法竞赛入门经典第4章笔记
- [算法]算法竞赛入门经典,笔记,见证成长。
- 算法竞赛入门经典 习题笔记
- 【算法竞赛入门经典】第二章:循环结构程序设计 代码及笔记
- 算法竞赛经典入门第三章习题
- 算法竞赛入门经典: 第三章 数组和字符串 3.4竖式问题
- 关于 算法竞赛入门经典 的一些学习经历与体会
- 算法入门经典 第1,2章学习笔记
- 算法竞赛入门经典: 第三章 数组和字符串 3.2开灯问题
- 算法竞赛入门经典 笔记(1)
- 算法竞赛入门经典 第三章 习题
- (算法竞赛入门)埃及分数问题学习笔记
- 算法竞赛入门经典: 第三章 数组和字符串 3.1逆序输出
- {算法竞赛入门经典}第三章 蛇形填数 边界预判
- 【算法竞赛入门经典】第四章:函数和递归笔记和代码
- 算法竞赛入门经典: 第三章 数组和字符串 3.3蛇形填数
- 关于算法竞赛入门经典一书的思考学习——枚举排序和子集生成!