奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort

Posted BobHuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort相关的知识,希望对你有一定的参考价值。

粘贴两个特别简单的冒泡排序

2014: Scramble Sort

Description

In this problem you will be given a series of lists containing both words and numbers. The goal is to sort these lists in such a way that all words are in alphabetical order and all numbers are in numerical order. Furthermore, if the nth element in the list is a number it must remain a number, and if it is a word it must remain a word.

Input

The input will contain multiple lists, one per line. Each element of the list will be separated by a comma followed a space, and the list will be terminated by a period. The input will be terminated by a line containing only a single
period.

Output

For each list in the input, output the scramble sorted list, separating each element of the list with a comma followed by a space, and ending the list with a period.

Sample Input

0.
banana, strawberry, OrAnGe.
Banana, StRaWbErRy, orange.
10, 8, 6, 4, 2, 0.
x, 30, -20, z, 1000, 1, Y.
50, 7, kitten, puppy, 2, orangutan, 52, -100, bird, worm, 7, beetle.
.

Sample Output

 

0.
banana, OrAnGe, strawberry.
Banana, orange, StRaWbErRy.
0, 2, 4, 6, 8, 10.
x, -20, 1, Y, 30, 1000, z.
-100, 2, beetle, bird, 7, kitten, 7, 50, orangutan, puppy, 52, worm.

分数字和字母,手写个cmp就好了

#include <cstring>
#include <cstdio>
#include <ctype.h>
char s[100][30];
char t[30];
int cmp(int i,int j){
    if(s[i][0]==-&&s[j][0]==-){
        if(strlen(s[i])<strlen(s[j]))
            return 1;
        else if(strlen(s[i])==strlen(s[j])){
            if(strcmp(s[i],s[j])<0)
                return 1;
        }
    }
    else if(isdigit(s[i][0])&&isdigit(s[j][0])){
        if(strlen(s[i])>strlen(s[j]))
            return 1;
        else if(strlen(s[i])==strlen(s[j])){
            if(strcmp(s[i],s[j])>0)
                return 1;
        }
    }
    else if(s[j][0]==-&&isdigit(s[i][0]))
        return 1;
    else if(isalpha(s[i][0])&&isalpha(s[j][0])&&stricmp(s[i],s[j])>0)
        return 1;
    return 0;
}
int main(){
while(~scanf("%s",t)){
    memset(s,0,sizeof(s));
    if(strcmp(t,".")==0) break;
    int i;
    for(i=0;;i++){
        int l=strlen(t);
        for(int j=0;j<l-1;j++)
        s[i][j]=t[j];
        if(t[l-1]==.)
        break;
        else scanf("%s",t);
    }
    int n=++i;
    for(int i=0;i<n-1;i++)
    for(int j=i+1;j<n;j++){
            if(cmp(i,j)){
             strcpy(t,s[j]);
             strcpy(s[j],s[i]);
             strcpy(s[i],t);
            }
    }
    for(int i=0;i<n;i++){
        if(i)printf(", ");
        printf("%s",s[i]);
    }
    printf(".\n");
}
return 0;
}

2034: 面积排序 技术分享 技术分享

Time Limit(Common/Java):1000MS/10000MS     Memory Limit:65536KByte
Total Submit: 1163            Accepted:433

Description

给定三角形、矩形、圆等二维几何图形,请根据面积从大到小进行排序。

Input

 

输入数据包括有多行,每行为一个几何图形(不超过100个几何图形)。各种几何图形的输入格式如下:
三角形(x1,y1,x2,y2,x3,y3分别为三角形顶点坐标):
triangle x1 y1 x2 y2 x3 y3

矩形(x1,y1,x2,y2为矩形某对角线的端点,矩形的边与坐标轴平行)
rectangle x1 y1 x2 y2

圆(x1,y1为圆心坐标,r为半径)
circle x1 y1 r

 

Output

对各个图形分别进行编号命名,三角形命名为triangle1、triangle2...,矩形命名为rectangle1、rectangle2...,圆命名为circle1、circle2...
然后按照面积从大到小进行排序,如果面积相同,则根据名字按照字典序排序。每行输出一个形状的名字以及面积,用空格分隔,面积保留3位小数。

Sample Input

rectangle 0.0 0.0 1.0 2.0
circle 0.0 0.0 1.0
triangle 0.0 0.0 1.0 1.0 1.0 0.0
rectangle 0.0 0.0 1.0 1.0
circle 0.0 0.0 2.0

Sample Output

circle2 12.566
circle1 3.142
rectangle1 2.000
rectangle2 1.000
triangle1 0.500

Hint

圆周率取PI = 3.1415926
没毛病,这个真的不算很难的,s=fabs((x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)/2);有些人恐怕是三角形面积的精度不对吧
#include <stdio.h>
#include <math.h>
#include <string.h>
double rectangle() {
    double x1,y1,x2,y2,s;
    scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
    s=fabs((x1-x2)*(y1-y2));
    return s;
}
double circle() {
    double x1,y1,r,s;
    scanf("%lf%lf%lf",&x1,&y1,&r);
    s=3.1415926*r*r;
    return s;
}
double triangle() {
    double x1,y1,x2,y2,x3,y3,s;
    scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
    s=fabs((x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)/2);
    return s;
}
int main() {
    int i,j,k,tmp3;
    double a[101],tmp1;
    int p,q,r,c[101];
    char s[101][10],st[10]="triangle",str[10]="circle",tmp2[10];
    k=0;
    p=1;
    q=1;
    r=1;
    while(scanf("%s",s[k])!=EOF) {
        if(strcmp(s[k],st)==0) {
            a[k]=triangle();
            c[k]=p++;
        } else if(strcmp(s[k],str)==0) {
            a[k]=circle();
            c[k]=q++;
        } else {
            a[k]=rectangle();
            c[k]=r++;
        }
        k++;
        getchar();
    }
    for(j=0; j<k-1; j++)
        for(i=0; i<k-j-1; i++) {
            if(a[i]<a[i+1]) {
                tmp1=a[i];
                a[i]=a[i+1];
                a[i+1]=tmp1;
                tmp3=c[i];
                c[i]=c[i+1];
                c[i+1]=tmp3;
                strcpy(tmp2,s[i]);
                strcpy(s[i],s[i+1]);
                strcpy(s[i+1],tmp2);
            } else if(a[i]==a[i+1]) {
                if(strcmp(s[i],s[i+1])>0) {
                    strcpy(tmp2,s[i]);
                    strcpy(s[i],s[i+1]);
                    strcpy(s[i+1],tmp2);
                    tmp3=c[i];
                    c[i]=c[i+1];
                    c[i+1]=tmp3;
                } else if(strcmp(s[i],s[i+1])==0) {
                    if(c[i]>c[i+1]) {
                        tmp3=c[i];
                        c[i]=c[i+1];
                        c[i+1]=tmp3;
                    }
                }
            }
        }
    for(i=0; i<k; i++)
        printf("%s%d %.3f\n",s[i],c[i],a[i]);
    return 0;
}

 

 




























以上是关于奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort的主要内容,如果未能解决你的问题,请参考以下文章

各种奇奇怪怪乱码出现的原因

奇奇怪怪的数学问题

奇奇怪怪

yolov5 奇奇怪怪的错误汇总

yolov5 奇奇怪怪的错误汇总

yolov5 奇奇怪怪的错误汇总