此题最后一个测试点没通过(ಥ﹏ಥ)
一、题目分析
1. 翻译
block:块
2. 关键点
1)地址是5位数字,前面用0填充“%05d”
2)最后一个元素地址为-1,无需填充
二、代码解析
我没有用reverse,也没有用vector,笨笨地用数组按照数学计算直接输出的。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <string>
#include <cstring>
#include <cctype>
#include <unordered_map>
using namespace std;
typedef struct Node {
int add,data,next;
} node;
int main() {
int start,n,k;
if(start<0) return 0;
cin>>start>>n>>k;
node tempnode,v[100000],vout[n];
for(int i=0; i<n; i++) {
scanf("%d %d %d",&tempnode.add,&tempnode.data,&tempnode.next);
v[tempnode.add]=tempnode;
}
int y,s,a=start;
y=n%k;
s=n/k;//y=2,s=2,k=3
// 输出s组,每组k个
while(s>0) {
for(int i=0; i<k; i++) {
vout[y+(s-1)*k+i]=v[a];
a=v[a].next;
}
s--;
}
// 输出剩余y个
for(int i=0; i<y; i++) {
vout[i]=v[a];
a=v[a].next;
}
// 修改next地址
for(int i=0;i<n;i++){
if(i!=n-1) vout[i].next=vout[i+1].add;
else vout[i].next=-1;
}
for(int i=0; i<n; i++) {
// 注意:地址用5位表示,用0填充,-1单独输出
if(i!=n-1) printf("%05d %d %05d",vout[i].add,vout[i].data,vout[i].next);
else printf("%05d %d %d",vout[i].add,vout[i].data,vout[i].next);
if(i!=n-1) cout<<endl;
}
return 0;
}
三、我的疑问
最后一个测试点 ┭┮﹏┭┮
如果喜欢我的博客,欢迎点赞、评论、收藏~~谢谢
( * ^ ▽ ^ * ) ~