奇奇怪怪的冒泡排序 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;
}
时间: 2024-10-09 15:41:47

奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort的相关文章

一些奇奇怪怪的过题思路

最近考了几次试,做完之后发现自己还是缺乏思维精度和深度--在此把一些奇怪的思路记下来-- 随 题意大概就是拿了一堆数取来取去,这些数在一个模数意义下做乘法,求出操作后取值的期望. 首先,找到这个模数的原根(鬼知道为什么现在出来了),然后就把这些乘法变成加法,然后就是矩阵一通乱搞-- 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using

有一个奇奇怪怪的发现,关于OJ测评时间

首先是POJ和BZOJ都通用的一个不稳定卡时: 就是代码里面写少量注释,可以加快速度,貌似是编译问题? 是少量! 然后BZOJ有一个神奇卡时: 就是先来一个人交一个测评需要好几秒的代码, 然后再来两份代码,其中一份(两份都是也行)是需要卡时的代码. 然后最开始的那份在测评的时候这两份将被显示是pending,随后会一起进行评测, 而因为是一起评测,所以会慢一点点,所以BZOJ会按不知名规则放宽时限 而这个比率是比较优的,人品好的话甚至可以让某道10s的题12s过!!!

奇奇怪怪的正则表达式

在javascript中的正则表达式格式:/^正则表达式$/ 如:regex = /^[a-zA-Z][a-zA-Z0-9]{5,19}$/; 在groovy中正则表达式的格式为:/~正则表达式/ 如:title=/~(.*)?[a-zA-Z0-9]/ 这里是几个主要非英文语系字符范围(google上找到的): 2E80-33FFh:中日韩符号区.收容康熙字典部首.中日韩辅助部首.注音符号.日本假名.韩文音符,中日韩的符号.标点.带圈或带括符文数字.月份,以及日本的假名组合.单位.年号.月份.日

[luoguP1922] 女仆咖啡厅桌游吧(奇奇怪怪的树形DP)

传送门 什么鬼的题? 代码 #include <cstdio> #include <cstring> #include <iostream> #define N 1000001 int n, cnt; int head[N], to[N << 1], next[N << 1], size[N], cp[N]; inline int read() { int x = 0, f = 1; char ch = getchar(); for(; !isd

jQuery取值的一些奇奇怪怪的操作

语法解释:1. $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发2. var checkText=$("#select_id").find("option:selected").text();  //获取Select选择的Text3. var checkValue=$("#select_id").val();  //获取Selec

【奇奇怪怪的bug系列】微信小程序

今天修改代码的时候,发现了一件让我很恐慌的事情,在app.json中修改页面路径顺序不起作用了: 这样我根本就看不到页面的效果啊??? 在折腾了半天后,才发现是一个比较乌龙的事情:昨天修改完首页后顺手把它设置成启动页了,相当于锁定成index页,今天再怎么改自然也没有用了. 只要在工具中找到编译配置,将自己锁定的页面改为"普通编译"即可 再次总结一下,设置某个页面为启动后的第一个页面有两种方法: 方法一.在spp.json中把路径放到第一个 app.json文件中的pages数组中,设

为什么使用 do while(0),大家见到的奇奇怪怪的代码.

因为现在一般的语言都不建议你使用goto语句,连C语言也不例外,那么你想执行一段代码后,一部分代码不执行,直接跳转到下面去,但是你写if else套嵌,会写很多层,你会觉得看起来好不爽啊,怎么这么多套,阅读起来也吃力,这个时候do while(0)就很方便了.例如下面的代码: do{ // 哎呀,我开始工作了,打印显示AFNetworking我全会 // 哎呀,我出现错误了,下面的执行不了,我break break; // 正常工作....... }while(0); perror("error

奇奇怪怪的数学问题

斐波那契数列 求证:   gcd(Fn,Fm)=F(gcd(n,m)) 原:https://blog.csdn.net/alan_cty/article/details/73928751 原文地址:https://www.cnblogs.com/meanttobe/p/11261346.html

一些DP上的奇奇怪怪的东西

单调队列&单调栈: 有手就行.jpg 四边形不等式: 若\(w(i,j)\)满足\(\forall a\le b<c\le d,w(a,c)+w(b,d)\le w(b,c)+w(a,d)\),那么我们称\(w(i,j)\)满足四边形不等式. 若\(w(i,j)\)满足\(\forall a\le b<c\le d,w(b,c)\le w(a,d)\),那么我们称\(w(i,j)\)满足区间包含单调性. 对于这样一般形式的转移方程:\(f_{l,r}=\min\limits_{l\le