洛谷入门4-数组
一、校门外的树
解题:
# include<iostream> using namespace std; int main() { int l,m; int start,end;//区间的开始和阶数 cin>>l>>m; int b[l+1]={0};//标记数目 int sum=0;//还剩几棵树 for(int i=0;i<m;i++) { cin>>start>>end; //一个区间中,被访问过,标记为1 for(int j=start;j<=end;j++) { if(b[j]==0) { b[j]=1; } } } //最后计算没有被标记过的树 for(int i=0;i<=l;i++) { if(b[i]==0) sum++; } cout<<sum; return 0; }
二、工艺品制作
解题:
# include<iostream> using namespace std; int main() { int w,x,h; cin>>w>>x>>h; int q; cin>>q; //将立方体标记为0,遇到在切除范围内的就标记为1 int s[30][30][30]={0}; int x1,y1,z1,x2,y2,z2; int cnt=0;//剩余立方体的个数 for(int m=0;m<q;m++) { cin>>x1>>y1>>z1>>x2>>y2>>z2; //切除范围内的立方体标记1 for(int i=x1;i<=x2;i++) for(int j=y1;j<=y2;j++) for(int k=z1;k<=z2;k++) { if(s[i][j][k]==0) s[i][j][k]=1; } } //计算标记为0的立方体 for(int i=1;i<=w;i++) for(int j=1;j<=x;j++) for(int k=1;k<=h;k++) { if(s[i][j][k]==0) cnt++; } cout<<cnt; return 0; }
三、彩票摇奖
解题:
(桶排序)
# include<iostream> using namespace std; //将中奖的数字标为1(桶排序),方便比较买的彩票数字 int main() { //初始化数组要清零!! int n,b[34]={0},t;//买彩票的张数,放中奖的数字,中奖的数字 int cnt,d[7]={0};//每张彩票中奖数字的个数,中奖的等级 cin>>n; for(int i=1;i<=7;i++) { cin>>t; b[t]=1; } for(int i=1;i<=n;i++) { cnt=0;//每张彩票中奖数字清零 for(int j=1;j<=7;j++) { cin>>t; if(b[t]==1) cnt++; } d[7-cnt]++; } for(int i=0;i<=6;i++) cout<<d[i]<<" "; return 0; }
四、神奇的幻方
解题:
# include<iostream> using namespace std; int n,a[100][100]={0};//幻方的阶数,二维数组构建幻方 int x,y;//点的坐标 int main() { cin>>n; a[1][n/2+1]=1; //初始的坐标 x=1; y=n/2+1; for(int k=2;k<=n*n;k++) { if(x==1&&y!=n) { x=n; y++; } else if(x!=1&&y==n) { y=1; x--; } else if(x==1&&y==n) { x++; } else if(x!=1&&y!=n) { if(a[x-1][y+1]==0) { x--; y++; } else { x++; } } a[x][y]=k; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<a[i][j]<<" "; } cout<<endl; } return 0; }
五、显示屏
解题:
# include<iostream> using namespace std; //列出第几个数字的第几行第几列 char c[10][5][3]= { {//0 'X','X','X', 'X','.','X', 'X','.','X', 'X','.','X', 'X','X','X', }, {//1 '.','.','X', '.','.','X', '.','.','X', '.','.','X', '.','.','X', }, {//2 'X','X','X', '.','.','X', 'X','X','X', 'X','.','.', 'X','X','X', }, {//3 'X','X','X', '.','.','X', 'X','X','X', '.','.','X', 'X','X','X', }, {//4 'X','.','X', 'X','.','X', 'X','X','X', '.','.','X', '.','.','X', }, {//5 'X','X','X', 'X','.','.', 'X','X','X', '.','.','X', 'X','X','X', }, {//6 'X','X','X', 'X','.','.', 'X','X','X', 'X','.','X', 'X','X','X', }, {//7 'X','X','X', '.','.','X', '.','.','X', '.','.','X', '.','.','X', }, {//8 'X','X','X', 'X','.','X', 'X','X','X', 'X','.','X', 'X','X','X', }, {//9 'X','X','X', 'X','.','X', 'X','X','X', '.','.','X', 'X','X','X', } }; int n;//数字位数 char s[1000];//一串数字 int main() { cin>>n; cin>>s; for(int i=0;i<5;i++)//枚举每一行 { for(int j=0;j<n;j++)//枚举每个数字 { for(int k=0;k<3;k++) cout<<c[s[j]-'0'][i][k]; if(j!=n-1) cout<<"."; } cout<<endl; } return 0; }
六、梦中的统计
解题:
# include<iostream> using namespace std; int m,n; int a[100]={0};//是一个桶 int main() { cin>>m>>n; for(int i=m;i<=n;i++) { int temp=i;//防止i的值被改变 while(temp) { a[temp%10]++; temp/=10; } } for(int i=0;i<10;i++) cout<<a[i]<<" "; return 0; }
七、Bovine Bones G
解题:
# include<iostream> using namespace std; int s1,s2,s3; int sum[20001]={0},maxx=0;//桶、出现的最大次数 int maxs=0;//出现最多的数字 int main() { cin>>s1>>s2>>s3; for(int i=1;i<=s1;i++) { for(int j=1;j<=s2;j++) { for(int k=1;k<=s3;k++) { sum[i+j+k]++; } } } //找出出现最多的数字 for(int i=s1*s2*s3-1;i>=3;i--) { if(sum[i]>=maxx) { maxx=sum[i]; maxs=i; } else break; } cout<<maxs; return 0; }
八、蛇形方阵
解题:
# include<iostream> # include<stdio.h> using namespace std; int n; int a[20][20]={0},k=1; int x=1,y=0; //注意边界 int main() { cin>>n; while(k<=n*n) { while(y<n&&!a[x][y+1])a[x][++y]=k++;//向右走 while(x<n&&!a[x+1][y])a[++x][y]=k++;//向下走 while(y>1&&!a[x][y-1])a[x][--y]=k++;//向左走 while(x>1&&!a[x-1][y])a[--x][y]=k++;//向上走 } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { printf("%3d",a[i][j]);//注意输出格式 } cout<<endl; } return 0; }
九、压缩技术
解题:
# include<iostream> using namespace std; int n,a,cnt=0,sum=0,t=0; //N、0和1的个数、cnt判断输出0还是1、sum判断输入了几个数了、t控制换行 int main() { cin>>n; while(sum<n*n) { cin>>a; sum+=a; cnt++; if((cnt+1)%2==0) { for(int i=0;i<a;i++) { cout<<"0"; t++; if(t==n)//换行 { cout<<endl; t=0; } } } else { for(int i=0;i<a;i++) { cout<<"1"; t++; if(t==n) { cout<<endl; t=0; } } } } return 0; }