首页 > 其他分享 >P1012 [NOIP1998 提高组] 拼数

P1012 [NOIP1998 提高组] 拼数

时间:2023-01-18 08:22:05浏览次数:66  
标签:compare return 拼数 int number P1012 char str NOIP1998

P1012 [NOIP1998 提高组] 拼数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 11

int minn(int a, int b) {
    return a < b ? a : b;
}
int compare_number(const void* a, const void* b) {//特殊情况:135和13,32和321 
    int str_a = strlen((char*)a), str_b = strlen((char*)b);
    int str_min = minn(str_a, str_b);
    int answer = strncmp((char*)b, (char*)a, str_min);//比较两个字符串的公共长度部分
    if (answer != 0 || str_a == str_b)//如果已经能判断出结果,就返回
        return answer;
    else if (str_a > str_b)//如果字符串a的长度更长,就比较a的剩余部分和字符串b
        return compare_number(a + str_min, b);
    else // if (str_b > str_a)
        return compare_number(a, b + str_min);
}
int main() {
    int n;
    scanf("%d", &n);
    char number[n][LENGTH];
    for (int i = 0; i < n; i++)
        scanf("%s", &number[i]);//输入
    qsort(number, n, sizeof(number[0]), compare_number);//排序
    for (int i = 0; i < n; i++)
        printf("%s", number[i]);//输出
    system("pause");
    return 0;
}

标签:compare,return,拼数,int,number,P1012,char,str,NOIP1998
From: https://www.cnblogs.com/fjnhyzCYL/p/17059102.html

相关文章

  • 计蒜客 - T2144 拼数
    计蒜客-T2144拼数题解:把所有数字看成字符串,但是难道直接降序排就结束了嘛,不是的,我们来看一个反例:31312虽然312>31但是明显31312>31231,所以我们不能简单的排序,我......
  • 洛谷刷题_P1009 [NOIP1998 普及组] 阶乘之和
    题目P1009[NOIP1998普及组]阶乘之和题目链接https://www.luogu.com.cn/problem/P1009知识点求阶乘正常做法:#include<stdio.h>longlongjiecheng(longlongn)......
  • P1008 [NOIP1998 普及组] 三连击
    P1008[NOIP1998普及组]三连击 题目描述:将1,2,…,9共9个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。这道......
  • [NOIP1998 普及组] 三连击
    生成九位一到九的全排列,按题目分割、过滤#include<iostream>#include<vector>#include<algorithm>boolvis[20];intqueue[50];intanswers[500];intcnt=0;void......
  • P1008 [NOIP1998 普及组] 三连击
    P1008[NOIP1998普及组]三连击分析:根据题意,有1-9这9个数要分成三组组成三个三位数,意味着这9个数只能出现一次,且三个三位数的比例为1:2:3,由此可以得知这三个数中最小的那......
  • [NOIP1998 普及组] 三连击
    [NOIP1998普及组]三连击思路:本题可以运用暴力枚举法,因为题目中有9个数字,所组成的3个三位数a,b,c的各个位数上的数的乘积与这已知的9个数的乘积相等,并且b=2*a,c=3*a。从能......
  • P1008 [NOIP1998 普及组] 三连击
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ for(inta=123,b,c;a<=329;a++) { b=2*a;c=3*a; if((a%10)*(a/10%10)*(a/100)*(b%10)*(b/10%10)*(b/100)*(c%1......
  • P1008 [NOIP1998 普及组] 三连击
    试题分析:将1到9九个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,数值较小,所以暴力枚举算法分析:因为4*3=12,超过了10,所以百位的数最多为3,因为1到9每个......
  • [NOIP1998 普及组] 三连击
    试题分析:题目要求三个三位数是由1~9中分成三组组成的,也就是说三个数中每个位数上的数字都不相同,然后三个三位数要符合1:2:3的比例关系,所以我们可以直接将i看做第1个三位数,剩......