今天接着看了数据结构,但是跟指针有关的看不懂(万恶的指针),写了考试的补题。

#include <stdio.h>
#include <stdlib.h>
int a[1000005];
int main()
{
int n,i,x=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
x++;
if(x>n)
x-=n;
while(a[x]!=0){
x++;
if(x>n)
x-=n;
}
if(a[x]==0){
x++;
if(x>n)
x-=n;
while(a[x]!=0){
x++;
if(x>n)
x-=n;
}
a[x]=i;
}
}
for(i=1;i<=n;i++){
printf("%d ",a[i]);
}
return 0;
}
自己写的代码虽然对了,感觉过于繁琐,感觉不太好,后面看了下题解,被震惊了,原来可以这么简洁明了,题解如下。
#include <iostream>
#include <cstdio>
using namespace std;
int a[1000001],n,s;
int main()
{
scanf ("%d",&n);
for (int i=1;i<=n;i++){for (int j=1;j<=2;j++)
{s++; if (s>n)s=1; if (a[s]!=0)j--;}a[s]=i;}
for (int i=1;i<=n;i++)printf ("%d ",a[i]); return 0;
}

一道水题,找到最大的x值,再求这个x到n中a的最小值即可求解。
#include <stdio.h>
#include <stdlib.h>
int a[200005];
int main()
{
int n,m,i,max=0,min=2e9;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(i=1;i<=m;i++){
int x,y;
scanf("%d %d",&x,&y);
if(x>max)
max=x;
}
for(i=max;i<=n;i++){
if(a[i]<min)
min=a[i];
}
printf("%d\n",min);
return 0;
}
数据结构学习与考试补题总结
2万+

被折叠的 条评论
为什么被折叠?



