yi743. 数组中的行(为什么只保留一位小数float也不行)
#include <iostream>
using namespace std;
double M[12][12];
int main(){
int n;
char m;
cin>>n;
cin>>m;
double sum = 0.0;
for(int i = 0;i<12;i++)
for(int j = 0;j<12;j++){
cin>>M[i][j];
if(i==n){
sum+=M[i][j];
}
}
//以下等价于printf("%.1lf",flag=='S'?count:count/12);
if(m=='S') printf("%.1lf",sum);
else printf("%.1lf",sum/12);
return 0;
}
这里先用的是float,结果精度不够,结果总是少点。
751. 数组的左方区域
#include <iostream>
using namespace std;
double M[12][12];
int main(){
char m;cin>>m;
for(int i = 0;i<12;i++)
for(int j = 0;j<12;j++)
cin>>M[i][j];
double sum=0.0;
int count = 0;
for(int i = 0;i<12;i++)
for(int j = 0;(j<12-i-1)&&(j<i);j++){
sum+=M[i][j];
count++;
}
printf("%.1lf",m=='S'?sum:sum/count);
return 0;
}
主要是找到行列之间的关系。
详见笔记。
753. 平方矩阵 I
//算法思想:元素,位置(i,j)到四条边的距离的最小值就是该元素的值。
//距离的定义,此元素穿过几条边能出去,距离就是几。
//到四条边的距离:i,j...
#include <iostream>
using namespace std;
int main(){
int n;
while(~scanf("%d",&n)&&n){
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++){
int up = i,down = n-i+1;
int left = j,right = n-j+1;
cout<<min(min(up,down),min(left,right))<<' ';
}
cout<<endl;
}
cout<<endl;
}
return 0;
}
756. 蛇形矩阵
{
int n,m;cin>>n>>m;
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int x = 0,y = 0,d = 1;
for(int i = 1;i<=n*m;i++){
M[x][y] = i;
int a = x+dx[d],b = y+dy[d];
if(a>=n||a<0||b>=m||b<0||M[a][b])
{ d = (d+1)%4;
a = x+dx[d],b = y+dy[d];
}
x = a;
y = b;
}
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++)
cout<<M[i][j]<<' ';
cout<<endl;
}
return 0;
}
一个很重要的技巧,画格子然后找偏移量。
详见笔记。