主页
搜索
最近更新
数据统计
申请密钥
系统公告
1
/
1
请查看完所有公告
第5次课堂总结
最后更新于 2025-07-30 23:22:20
作者
jhy321
分类
个人记录
复制 Markdown
查看原文
删除文章
更新内容
# 神奇的幻方 ## 错因 没看清楚题目内容。 ## 思路 先输入二维数组,再枚举每个条件并按条件来录入另一个 二维数组,最后输出另一个二维数组。 ``` #include<bits/stdc++.h> using namespace std; long long n,f,a[10001],b[10001],ab[10001][10001],s=0; int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ s++; if(s==1){//首先将 1 写在第一行的中间。 a[s]=1; b[s]=n/2+1; ab[a[s]][b[s]]=s; } else if(a[s-1]==1&&b[s-1]!=n){//若 (K−1) 在第一行但不在最后一列,则将 K 填在最后一行, (K−1) 所在列的右一列。 a[s]=n; b[s]=b[s-1]+1; ab[a[s]][b[s]]=s; }else if(a[s-1]!=1&&b[s-1]==n){//若 (K−1) 在最后一列但不在第一行,则将 K 填在第一列, (K−1) 所在行的上一行。 a[s]=a[s-1]-1; b[s]=1; ab[a[s]][b[s]]=s; }else if(a[s-1]==1&&b[s-1]==n){//若 (K−1) 在第一行最后一列,则将 K 填在 (K−1) 的正下方。 a[s]=a[s-1]+1; b[s]=b[s-1]; ab[a[s]][b[s]]=s; }else{//若 (K−1) 既不在第一行,也不在最后一列,如果 (K−1) 的右上方还未填数,则将 K 填在 (K−1) 的右上方,否则将 K 填在 (K−1) 的正下方。 if(ab[a[s-1]-1][b[s-1]+1]==0){ a[s]=a[s-1]-1; b[s]=b[s-1]+1; ab[a[s]][b[s]]=s; }else{ a[s]=a[s-1]+1; b[s]=b[s-1]; ab[a[s]][b[s]]=s; } } } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout<<ab[i][j]<<" "; } cout<<endl; } return 0; } ``` # 花生采摘 ## 错因 时间不够。 ## 思路 先遍历最大,再依次判断时间够不够,够就加花生数量, 不够就输出。 ``` #include<bits/stdc++.h> using namespace std; int m,n,idx,T,ans,px,py,dx,dy,t,q[31][31]; struct node { int x,y,cnt; }a[100001]; bool cmp(node s,node b){ return s.cnt>b.cnt; } int main(){ cin>>m>>n>>T; for(int i=1;i<=m;i++){ for(int j = 1; j <= n; j ++){ cin>>q[i][j]; ++idx; a[idx].cnt=q[i][j]; a[idx].x=i; a[idx].y=j; } } sort(a+1,a+idx+1,cmp);//遍历最大 px=1;py=a[1].y; T--; for(int i=1;i<=idx;i++){//依次判断时间够不够。 t=0; dx=a[i].x; dy=a[i].y; t=abs(px-dx)+abs(py-dy); int back = a[i].x; T--; T-=t; if(T>=dx){//够就加花生数量,不够就输出。 ans+=q[dx][dy]; px=dx; py=dy; }else{ cout<<ans; return 0; } } cout<<ans; return 0; } ```
正在渲染内容...
点赞
0
收藏
0