C语言问题,比较复杂

来源:百度知道 编辑:UC知道 时间:2024/05/07 22:44:00
从标准输入上读入N(1<= N <= 200000)个由空白符分隔的整数。对这N个数从小到大连续编号,相同的数应具有相同的编号。在标准输出上按这N个数输入时的顺序输出它们的编号序列。例如,设输入数据为 5 3 4 7 3 5 6,则输出数据为3 1 2 5 1 3 4。

我的思想是生成两个链表,一个按输入顺序排列,一个按从小到大排列,按第二个链表生成序号,再将第二个链表的序号复制到第一个链表,结果程序在DEBUG时运行正常,结果也正确,但一旦start without debug 就会出错.麻烦给看一下
#include<stdio.h>
#include<stdlib.h>
typedef struct list{
int num;
int serial;
struct list *next;
}LIST;
LIST *insert(LIST *input,int in);
LIST *compose(LIST *temp,int in);
LIST *sequence(LIST *input,LIST *temp);
int main()
{
LIST *input=NULL,*temp=NULL,*p,*q;
char c;
int in;
while((c=getchar())!='\n')
{
ungetc(c,stdin);
scanf("%d",&in);
input=insert(input,in);
temp=compose(temp,in);
}/*数据输入*/
input=sequence(input,temp);
p=input;
while(p!=NULL)
{
if(p->next!=NULL)
printf("%d ",p->serial);
else

链表?指针变量?二叉树?
多年不用,忘了。。。

zhe ge wen ti hen nan

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

class op
{
public:
op(vector<int>& _seq) : seq(_seq) {}

void operator ()(int elems)
{
cout << count(seq.begin(), seq.end(), elems) << ' ';
}
private:
vector<int>& seq;
};

int main()
{
vector<int> seq;

cout << "输入任意数以空格格开, ctrl + z结束:\n";

copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(seq));

cin.clear();
cin.ignore(1);

cout << "输入一个数N: ";
int input;
cin >> input;
for_each(seq.begin(), seq.begin() + input + 1, op(seq));
}

输入任意数以空格格开, ctrl + z结束:
1 2 2 3 4^Z
输入一个数N: 4
1 2 2 1 1