列表

详情


KS9. 字符串排序

描述

月神拿到一个新的数据集,其中每个样本都是一个字符串,样本的的后六位是纯数字,月神需要将所有样本的后六位数字提出来,转换成数字,并排序输出。

注意:这里的排序并不是针对每个字符串的后六位,而是需要按数字大小顺序输出所有样本的后六位数字。

月神要实现这样一个很简单的功能确没有时间,作为好朋友的你,一定能解决月神的烦恼,对吧。

数据范围:字符串长度满足 ,每组测试中包含 个字符串

输入描述

每个测试用例的第一行是一个正整数 M ,表示数据集的样本数目

接下来输入 M 行,每行是数据集的一个样本,每个样本均是字符串,且后六位是数字字符。

输出描述

对每个数据集,输出所有样本的后六位构成的数字排序后的结果(每行输出一个样本的结果)

示例1

输入:

4
abc123455
cba312456
boyxx213456
cdwxa654321

输出:

123455
213456
312456
654321

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 224KB, 提交时间: 2019-10-26

/*# include <stdio.h>
# include <string.h>
int change(char m)
{
    int i,v;
    v=0;
    for(i=strlen(m)-6;i<strlen(m);i++)
        v = v*10 + m[i];
    return v;
}


void main()
{
    int i,M,max,temp;
    scanf("%d",&M);
    int x[M];
    char s[M];
    for(i=0;i<M;i++)
    {
        scanf("%s",&s[i]);
        x[i]=change(s[i]);
    }
    for(i=0;i<M-1;i++)
        for(int j=i+1;j<M;j++)
            if(x[i]<x[j])
            {
                temp = x[i];
                x[i] =x[j];
                x[j] = temp;
            }
    for(i=0;i<M;i++)
        printf("%s\n",x[i]);

}*/
#include<stdio.h>
#include<string.h>
int main()
{
    int number;
    //输入数据集的样本数目
    scanf ("%d",&number);
    char str[number][101];
    int len[number];
    int num[number];
    for(int i=0;i<number;i++)
    {
        scanf("%s",str[i]);
        len[i] = strlen(str[i]);
    }
    //输出样本数据
    for(int i=0;i<number;i++)
    {
        int ans=0;
       // num[i]=0;
        for(int j=0;j<6;j++)
        {
            //printf("%c",str[i][len[i]-6+j]);
            ans = ans*10 + str[i][len[i]-6+j]-'0';
        }
        num[i]=ans;
        //printf("\n");
    }
    int temp;
    for(int i=0;i<number-1;i++)
    {
        for(int j=0;number-1-j;j++)
        {
            if(num[j]>num[j+1])
            {
                temp = num[j+1];
                num[j+1]=num[j];
                num[j]=temp;
            }
        }
    }
    for(int i=0;i<number;i++)
    {
        printf("%d\n",num[i]);
    }
     
}

C 解法, 执行用时: 1ms, 内存消耗: 332KB, 提交时间: 2020-05-02

#include <stdio.h>
#include <string.h>
int main()
{
    int n,i,j;
    scanf("%d",&n);
    char arr[n][100],len[n];
    int temp=0,num[n];
    for(i=0;i<n;i++)
    {
        scanf("%s",arr[i]);
        len[i]=strlen(arr[i]);
    }
    for(i=0;i<n;i++)  num[i]=0;
    for(i=0;i<n;i++)
    {
        for(j=len[i]-6;j<len[i];j++)
        {
            num[i]=num[i]*10+arr[i][j]-'0';

        }
              
    } 
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
             if(num[i]>num[j])
            {
            temp=num[i];
            num[i]=num[j];
            num[j]=temp;
            
            }
        }
    }
   

    for(i=0;i<n;i++)
    {
        printf("%d\n",num[i]);
    }

    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 352KB, 提交时间: 2020-07-20

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"
int main()
{
    int num = 0;
    scanf("%d",&num);
    char* str[num][100];
   char str1[7] = {0};
    int out[num];
    int tempNum = 0;
    //char* str = (char*)malloc(num*100);
    for(int i = 0;i<num;i++)
    {
        //fgets(str[i],100,stdin);
        scanf("%s",str[i]);
		char* tempstr = str[i];
        int len = strlen(str[i]);
		//printf("len:%d\n",len);
        sprintf(str1,"%s",&tempstr[len-6]);
		//str[6] = '\0';
		//printf("str1:%s\n",str1);
        out[i] = atoi(str1);
		//printf("out[%d]:%d\n",i,out[i]);
        
    }
    
    for(int j = 0;j<=num-2;j++)
    {
        for(int l = j+1;l<=num-1;l++)
        {
            if(out[j]>out[l])
            {
                int temp = out[j];
                out[j] = out[l];
                out[l] = temp;
            }
        }  
    }
    
    for(int m = 0;m<num;m++)
    {
        printf("%d\n",out[m]);
    }
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2020-03-05

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

int getnum(char *str)
{
    if (str == NULL)
        return -1;

    unsigned int len = strlen(str);
    if (len < 7)
        return -1;

    return atoi(str + len - 7);
}

int sort_arry(int buf[], unsigned int size)
{
    if (buf == NULL)
        return -1;

    unsigned int i;
    for (i = 1; i < size; i++)
    {
        unsigned int j = i;
        int val = buf[i];

        while (j > 0 && val < buf[j - 1])
        {
            buf[j] = buf[j - 1];
            j--;
        }
        buf[j] = val;
    }

    return 0;
}

int print_arry(int buf[], unsigned int size)
{
    if (buf == NULL)
        return -1;

    unsigned int i;
    for (i = 0; i < size; i++)
    {
        printf("%d\n", buf[i]);
    }

    return -1;
}

int main(int argc, char *agrv[])
{
    int row = 0, count = 0;
    char s[1024] = {0};
    int buf[100] = {0};

    scanf("%d\n", &row);

    while (fgets(s, sizeof(s), stdin) != NULL)
    {
        buf[count++] = getnum(s);
    }

    sort_arry(buf, row);
    print_arry(buf, row);

    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2020-03-08

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int cmpfunc (const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}

int main()
{
    int n;
    scanf ("%d",&n);
    char str[n][101];
    int len[n];
    int num[n];
    for(int i = 0;i < n;i++)
    {
        scanf("%s",str[i]);
        len[i] = strlen(str[i]);
    }
    for(int i = 0;i< n;i++)
    {
        int ans=0;
        for(int j = 0;j < 6;j++)
        {
            ans = ans*10 + str[i][len[i]-6+j]-'0';
        }
        num[i]=ans;
    }
    qsort(num, n, sizeof(int), cmpfunc);
    for(int i = 0;i < n;i++)
    {
        printf("%d\n",num[i]);
    }
    return 0;
}

上一题