题目背景
宇宙总统竞选
题目描述
地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。
输入输出格式
输入格式:
第一行为一个整数n,代表竞选总统的人数。
接下来有n行,分别为第一个候选人到第n个候选人的票数。
输出格式:
共两行,第一行是一个整数m,为当上总统的人的号数。
第二行是当上总统的人的选票
输入输出样例
输入样例#1:
5
98765
12365
87954
1022356
985678
输出样例#1:
4
1022356
算法如下:运用指针的方式进行排序。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
#define M 100
int main()
{
int i,n,max;
char *ppiao[N];
scanf("%d",&n);
for(i=0;i<n;i++)
{
ppiao[i]=(char )malloc(Msizeof(char));
scanf("%s",ppiao[i]);
}
max=0;
ppiao[max]=ppiao[0];
for(i=1;i<n;i++)
{
if(strlen(ppiao[max])<strlen(ppiao[i]))
{
ppiao[max]=ppiao[i];
max=i;
}
if(strlen(ppiao[max])==strlen(ppiao[i]))
{
if(strcmp(ppiao[max],ppiao[i])<0)
{
ppiao[max]=ppiao[i];
max=i;
}
}
if(strlen(ppiao[max])>strlen(ppiao[i]))
continue;
}
printf("%d\n%s\n",max+1,ppiao[max]);
}
(1)首先定义指针数组ppiao[N];
(2)使用malloc函数开辟n个内存空间,使每个输入的指针变量里的票数均能存入。(若为向指针里输入数据,就可使用malloc开辟空间);
(3)因为是求最大值,我们可将指针变量 ppiao[0]赋给指针变量ppiao[max],将其下标同时赋给max,假定最高票数为指针变量ppiao[max]的字符串。
(4)开始进入循环,这里需要使用strlen 函数确定字符串的大小,字符串长度越大,它的票数就越高。这里有三种情况:
*第一种:假定的指针ppiao[max]长度小于和它进行比较的指针ppiao[i]长度,则将指针ppiao[i]赋给ppiao[max],同时下标i也赋给max。
*第二种:假定的指针ppiao[max]长度等于和它进行比较的指针ppiao[i]长度,则需继续比较,通过strcmp函数对字符串进行比较,即对两个字符串从首字符到尾字符进行数字0~9之间的比较,同样将最后得到的较大者赋给ppiao[max]。
*第三种:假定的指针ppiao[max]长度大于和它进行比较的指针ppiao[i]长度,则继续下一条语句,即跳过这个对下一个进行比较。
这是主要的思想,有时感觉自己蛮水的,一些普及题都不会做真得伤自尊。有时做了一下午研究出来的代码,也会遇到bug不能运行。我想对自己说:别懈怠,比你努力的人太多了,你还得加油!