一连串数字,打印min max sum
最最最简单的那种
题目:
已知一个正整数序列,个数未知,但至少有一个元素,建立一个单链表,并使用该链表存储这个正整数序列,然后统计这个序列中元素的最大值与最小值,计算序列全部元素之和。正整数的输入用-1作为结束标志,注意-1不算这个正整数序列中的元素(不要统计-1)。
输入
一个正整数序列,正整数序列元素的个数未知,但以输入“-1”结束,输入“-1”前至少输入一个正整数。序列中的元素范围在1—999999999之间。
输出
三个正整数,即最大值、最小值、所有元素之和。
数据最多的测试用例节点数在1000这个数量级,所有整数可以用int型存储。
#include <stdio.h>
#include <stdlib.h>
typedef struct num
{
int value;
struct num *next;
}Num;
int main()
{
int number;
Num *head=NULL;
do{
scanf("%d", &number);
if(number != -1){
//add to linked-list
Num *p = (Num*)malloc(sizeof(Num));
p->value=number;
p->next=NULL;
Num *last = head;
if(last != NULL){
while(last->next != NULL)
last=last->next; //find the last
last->next = p; //把最后一个添上去
}
else{
head=p;
}
}
}while(number != -1);
int sum=0, max=head->value, min=head->value; //不要把开始的sum设成第一个value
//应该是0不然多加了
Num *a;
a=head;
while(a!=NULL){
if(a->value > max)
max=a->value;
else if(a->value < min)
min = a->value;
sum += a->value;
a=a->next;
printf("%d\n", sum);
}
printf("%d %d %d", sum, max, min);
return 0;
}