您的位置:首页 > 其它

02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序

2013-09-24 11:43 2106 查看
1.题目描述:

对N个长度最长可达到1000的数进行排序。

输入:

输入第一行为一个整数N,(1<=N<=100)。

接下来的N行每行有一个数,数的长度范围为1<=len<=1000。

每个数都是一个正数,并且保证不包含前缀零。

输出:

可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。

样例输入:

3

11111111111111111111111111111

2222222222222222222222222222222222

33333333

样例输出:

33333333

11111111111111111111111111111

2222222222222222222222222222222222

参考答案

#include<stdio.h>
#include<string.h>

//对 n 个长度最长可达到1000的数进行排序
void sortnum(char num[100][1000], int n)
{
char temp[1000];
int k, i;

//接收输入
for(k=0; k<n; k++)
{
scanf("%s", num[k]);
}
for(i=0; i<n; i++)
{
for(k=0; k<n-i-1; k++)
{
if(strlen(num[k]) > strlen(num[k+1]))
{
strcpy(temp, num[k]);
strcpy(num[k], num[k+1]);
strcpy(num[k+1], temp);
}
else if(strlen(num[k]) == strlen(num[k+1]) && strcmp(num[k], num[k+1])>0)
{
strcpy(temp, num[k]);
strcpy(num[k], num[k+1]);
strcpy(num[k+1], temp);
}
}
}
}

//输出数据
void output(char num[100][1000], int n)
{
for(int k=0; k<n; k++)
{
printf("%s\n", num[k]);
}
}

int main()
{
char num[100][1000];
int n;
while(scanf("%d", &n) != EOF)
{
sortnum(num, n);
output(num, n);
}
return 0;
}


2. 题目描述:

对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12

输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

输入:

输入包括一个由字母和数字组成的字符串,其长度不超过100。

输出:

可能有多组测试数据,对于每组数据,

按照样例输出的格式将字符出现的位置标出。

样例输入:

abcaaAB12ab12

样例输出:

a:0,a:3,a:4,a:9

b:1,b:10

1:7,1:11

2:8,2:12

提示:

1、下标从0开始。

2、相同的字母在一行表示出其出现过的位置。

参考答案

#include<stdio.h>
#include<string.h>

typedef struct ch_arr{
int index[101];   //记录相同字符出现的位置
int p;   //记录相应字符出现的次数
int flag;   //指示相应字符是否输出过
}ch_arr;

int main()
{
ch_arr temp[130];
char str[101];
int k, t;

while(scanf("%s", str) != EOF)
{
//初始化存储数组
for(k=0; k<130; k++)
{
temp[k].p = 0;
temp[k].flag = 0;   //flag 表示对应字符未输出过
}
//接收用户输入的字符串
for(k=0; k<strlen(str); k++)
{
temp[str[k]].index[temp[str[k]].p] = k;
temp[str[k]].p++;
}

//输出结果
for(k=0; k<strlen(str); k++)
{
if(temp[str[k]].p>1 && 0==temp[str[k]].flag)
{
for(t=0; t<temp[str[k]].p-1; t++)
{
printf("%c:%d,", str[k], temp[str[k]].index[t]);
}
printf("%c:%d\n", str[k], temp[str[k]].index[t]);
temp[str[k]].flag = 1;
}
}
}
return 0;
}


3. 题目描述:

输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。

输入:

输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。

接下来的一行有N个整数。

输出:

可能有多组测试数据,对于每组数据,

第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。

第二行将排序的结果输出。

样例输入:

4

1 3 4 2

样例输出:

4

1 2 3

提示:

如果数组中只有一个数,当第一行将其输出后,第二行请输出"-1"。

参考答案

#include<stdio.h>

int main()
{
int i, k, arr[1000], n;
while(scanf("%d", &n) != EOF)
{
for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
}
if(n>1)
{
for(i=0; i<n; i++)
{
for(k=0; k<n-i-1; k++)
{
if(arr[k]>arr[k+1])
{
arr[k] = arr[k] + arr[k+1];
arr[k+1] = arr[k] - arr[k+1];
arr[k] = arr[k] - arr[k+1];
}
}
}
printf("%d\n", arr[n-1]);
for(i=0; i<n-2; i++)
{
printf("%d ", arr[i]);
}
printf("%d\n", arr[n-2]);
}
else
{
printf("%d\n", arr[0]);
printf("-1\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐