zoukankan      html  css  js  c++  java
  • 奇奇怪怪的冒泡排序 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(".
    ");
    }
    return 0;
    }

    2034: 面积排序 分享至QQ空间 去爱问答提问或回答

    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
    ",s[i],c[i],a[i]);
        return 0;
    }

     

  • 相关阅读:
    vue-cli构建的项目手动添加eslint配置
    给通过canvas生成的二维码添加logo
    webpack打包时候去掉console.log配置
    gist.github.com 被墙无法访问解决办法
    axios.js 在测试机ios7.1的iphone4中不能发送http请求解决方案
    linux 系统的7个运行级别
    今天遇到了不能创建mysql函数
    今天测试大商创,遇到了 upstream sent too big header while reading response header from upstream
    mysql5.7 datetime 默认值为‘0000-00-00 00:00:00'值无法创建问题解决
    IE浏览器中判断IE版本
  • 原文地址:https://www.cnblogs.com/BobHuang/p/6869263.html
Copyright © 2011-2022 走看看