九度oj 专题整理(模拟部分3)
来源:互联网 发布:极简主义 知乎 编辑:程序博客网 时间:2024/06/06 06:43
三角形的输入输出问题,我想到了二维数组,在POJ上练习题目的过程中,发现北大对二维数组的考察也是蛮多的,感觉也很有趣,于是学习了几个题目,因为写不出代码,也只能说学习了,简单做一下整理,如果以后有机会,会完善这部分= =
20:反反复复
第一次遇上没做出来,心情很不好的说= =点击打开链接,以下是网上代码,因为是从我的AC代码中粘过来的,所以就不附原来的博客链接了 = =见谅
#include <iostream> #include <string> using namespace std; const int M = 20; const int N = 100; char A[N][M], B[N][M]; int main() { string s; int m, n, t=0, r=-1; cin >> m; cin >> s; while (t < s.length())//一次读入字符到二维数组 { r++; for (int j=0; j<m; j++) A[r][j] = s[t++]; if (t < s.length()) { r++; for (int j=m-1; j>=0; j--) A[r][j] = s[t++]; } } n = s.length() / m; //行数 for (int j=0; j<m; j++)//从上到下逐行输出字符 { for (int i=0; i<n; i++) { cout << A[i][j]; } } cout << endl; return 0; }
以下是我的代码,WA了,也许是字符数组太多,搞的哪里有点乱,可是想了很久也不知道哪里错了,如果有大神看了,请指出,不胜感激
#include <stdio.h>#include <stdlib.h>#include <algorithm>#include <iostream>#include <string.h>#include <queue>#include <vector>using namespace std;int main(){ char str[2200]; char ma[40][42]; char map[42][42]; int n; scanf("%d",&n); //getchar(); cin>>str; //scanf("%s",str); int len=strlen(str); memset(map,'\0',sizeof(map)); int k=0; int m=len/n; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { ma[i][j]=str[k++]; } } for(int i=0; i<m; i++) { int p=0; if(i%2==1) { for(int j=n-1; j>=0; j--) { map[i][p++]=ma[i][j]; } } else { for(int j=n-1; j>=0; j--) { map[i][j]=ma[i][j]; } } } for(int j=0; j<n; j++) { for(int i=0; i<m; i++) { printf("%c",map[i][j]); } // printf("\n"); } printf("\n"); return 0;}
神奇的幻方点击打开链接
这个题目描述的很清楚,但是自己写的时候真是状况百出,四个方向i,j的加减不对应,改了好久= =
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#define exp 1e-6#define pi acos(-1.0)using namespace std;int main(){ int n; int ma[40][40]; while(~scanf("%d",&n)) { memset(ma,0,sizeof(ma)); int m=2*n-1; int sum=1; int cnt=m*m; int i=1,j=n; while(sum<=cnt) { ma[i][j]=sum++; //printf("%d %d %d\n",i,j,ma[i][j]); if(i==1&&j<m) { i=m; j++; } else if(j==m&&i>1) { i--; j=1; } else if(i==1&&j==m||ma[i-1][j+1]!=0) { i++; } else { i--; j++; } //ma[i][j]=sum++; //printf() } for(int x=1;x<=m; x++) { for(int y=1; y<m; y++) { printf("%d ",ma[x][y]); } printf("%d\n",ma[x][m]); } } return 0;}
23:二维数组回形遍历
题目点击打开链接这个题目感谢一篇优秀的博客点击打开链接,不过我只是稍加改动,就样例正确,但是TLE了,代码就不贴了
24:蛇形填充数组
题目点击打开链接也是借鉴的其他博客,感觉写的很好,我写着写着就感觉乱,大概是对while循环掌握的还不好吧
#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#include<math.h>#include<queue>#include<set>#include<map>#define LL long long#define PI acos(-1)#define exp 1e-9#define INF 0x7ffffff;using namespace std;int a[10][10];int n;int prin(int e)//c{ for(int i=1; i<=e; i++) { for(int j=1; j<=e; j++) cout<<a[i][j]<<' '; cout<<endl; } return 0;}int main(){ cin>>n; int x=1,i=1,j=1,m=1; while(m<=n) { a[i][j]=x; if(j<n) j++; else if(j==n) i++; x++; while(i<n&&j>1) { a[i][j]=x; i++; j--; x++; } a[i][j]=x; if(i<n) i++; else if(i==n) j++; x++; while(i>1&&j<n) { a[i][j]=x; i--; j++; x++; } m++; } prin(n); return 0;}
类似的题目还有,比如当m!=n的时候,这个时候就比较麻烦了,不过能看明白的,有套路的不都是水题吗,,暂不叙述,,
阅读全文
0 0
- 九度oj 专题整理(模拟部分3)
- 九度oj 专题整理 (模拟部分1)
- 九度oj 专题整理 (模拟部分2)
- 九度oj 专题整理(模拟部分4)
- 九度OJ 1014 排名 (模拟)
- 九度OJ 1177 查找 (模拟)
- 九度OJ 1179 阶乘(模拟)
- 九度OJ 打印日期 (模拟)
- 【九度OJ】1002【模拟】
- 【九度OJ】1010【模拟】
- 【九度OJ】1022【模拟】
- 【九度OJ】1036【模拟】
- 【九度OJ】1018【模拟】
- 【九度OJ】1048【模拟】
- 【九度OJ】1021【模拟】
- 【九度OJ】1032【模拟】
- 【九度OJ】1013【模拟】
- 九度OJ 1147:Jugs(罐子) (模拟、游戏)
- WPF布局该如何选用
- implement-strstr
- Mysql解除正在死锁的状态
- ORA-02292: 违反完整约束条件 (MIDBJDEV2.SYS_C0020757)
- ScrollView嵌套其他布局时不能达到全屏的效果
- 九度oj 专题整理(模拟部分3)
- 文献计量学指标应用的四个群体
- 148_IO_字节流_节点流_文件的拷贝
- 最小生成树之克鲁斯卡尔算法
- sizeof(类名),空类大小
- 一个简单的MyBatis例子
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H
- 149_IO_字节流_节点流_文件夹拷贝_工具制作_文件后缀与软件的关系
- 华为笔试题(8)