今天翻到以前学快排的时候写的练习code,本文转

2020-01-05 19:23 来源:未知

#include <stdio.h>
// #include <WATLIB.H> 测试表明lib库不通用
//#include <vcLIB.H>

 

本文转载(3-3自己补充,可供参考):

本文摘自

typedef  char BOOL ;
typedef  unsigned char UCHAR8 ;

#include <stdio.h>

第一章
习题1-1
#include <stdio.h>
int main()
{
int a,b,c;
double d;
scanf("%d%d%d",&a,&b,&c);
d=(double)(a+b+c);
printf("%.3lfn",d/3.0);
return 0;
}

如有版权问题,请与我联系!谢谢

#define  NUM  10

#include <stdlib.h>

习题1-2
#include <stdio.h>
int main()
{
int f;
double c;
scanf("%d",&f);
c=5*(f-32)/9;
printf("%.3lfn",c);
return 0;
}

很多人问这个东西.我以前也看了好久,今天翻到以前学快排的时候写的练习code,基本上
能覆盖绝大部分用法了.

void PN(int n,int m)  /* 把 n 用m 进制显示 */
{
    char temp[10]={0};
    int i=0;
    do {
        temp[i] = n%m;
        i++;
        n /= m;
    }while(n>0);
    for(i -= 1;i>=0;i--){
        printf("%x",temp[i]);
    }
}

#define  NUM   100

习题1-3
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%dn",(n*(1+n))/2);
return 0;
}

里面有很多地方没判断相等的情况,按道理来说相等情况下应该返回0的,这个请看代码的
时候注意.我尽量保证代码不出错了.

int main()
{
    int i;
    int date[NUM];

typedef struct node

习题1-4
#include <stdio.h>
#include <math.h>
#define pi 4.0*atan(1.0)
int main()
{
int n;
scanf("%d",&n);
printf("%lfn",sin((pi*n)/180));
printf("%lfn",cos((pi*n)/180));
return 0;
}

下面的这些说明和问题都是个人原创,没查什么资料,所以不保证其完全正确性,在此表示个
人不对出现的问题负任何责任,大家WA了或者干吗的不要怪我,不过至少目前来说我用起来
是没问题的 :)

    for (i=0;i<NUM ;i++)
    {
        date[i] = i;
        PN(date[i],2);printf("t");
    }
    printf("n");
    for (i=0;i<NUM ;i++)
    {
        date[i] ^= (date[i]>>1); // 转成BCD Gray 码
        PN(date[i],2);printf("t");
    }
    printf("n");
    
    for (i=0;i<NUM ;i++)
    {
        int temp = date[i];// 转成BCD Gray 码
        while (temp>0)
        {
            temp >>= 1;
            date[i] ^= temp;
        }
        PN(date[i],2);printf("t");
    }

{

习题1-5
#include <stdio.h>
int main()
{
double x1,y1,x2,y2,a;
scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("%lfn",a);
return 0;
}

/*----------------------------------------------------------------------------*/

    return 0;
}

        int x;

习题1-6
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%2==0)
{
printf("YESn");
}
else
{
printf("NOn");
}
return 0;
}

** 关于快排函数的一些说明 **

        int y;

习题1-7
#include <stdio.h>
int main()
{
int n;
double a;
scanf("%d",&n);
a=n*95.0;
if(a<300)
{
printf("%.2lfn",a);
}
else
{
printf("%.2lfn",a*0.85);
}
return 0;
}

qsort,包含在stdlib.h头文件里,函数一共四个参数,没返回值.一个典型的qsort的写法如下

}node ;

习题1-8
#include <stdio.h>
#include <math.h>
int main()
{
double n;
scanf("%lf",&n);
printf("%.2lf",fabs(n));
return 0;
}

qsort(s,n,sizeof(s[0]),cmp);

node  global[NUM]={-999};

习题1-9
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a==b&&b==c)
{
printf("non");
}
if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
{
printf("yesn");
}
else
{
printf("non");
}
return 0;
}

其中第一个参数是参与排序的数组名(或者也可以理解成开始排序的地址,因为可以写&s[i]
这样的表达式,这个问题下面有说明); 第二个参数是参与排序的元素个数; 第三个三数是
单个元素的大小,推荐使用sizeof(s[0])这样的表达式,下面也有说明 :) ;第四个参数就是
很多人觉得非常困惑的比较函数啦,关于这个函数,还要说的比较麻烦...

int  count=0;

习题1-10
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%4==0)
{
if(n%100!=0)
{
printf("non");
}
else
{
if(n%400==0)
{
printf("yesn");
}
else
{
printf("non");
}
}
}
else
{
printf("non");
}
return 0;
}

我们来讨论cmp这个比较函数(写成cmp是我的个人喜好,你可以随便写成什么,比如qcmp什么
的).典型的cmp的定义是

int find(int left,int right,node x)

第二章

int cmp(const void *a,const void *b);

{

永利平台娱乐,习题2-1

返回值必须是int,两个参数的类型必须都是const void *,那个a,b是我随便写的,个人喜好.
假设是对int排序的话,如果是升序,那么就是如果a比b大返回一个正值,小则负值,相等返回
0,其他的依次类推,后面有例子来说明对不同的类型如何进行排序.

        int  mid =(left +right )/2;

#include <stdio.h>
int main()
{
int n,count=0;
scanf("%d",&n);
while(n>0)
{
count++;
n=n/10;
}
printf("%dn",count);
return 0;
}

在函数体内要对a,b进行强制类型转换后才能得到正确的返回值,不同的类型有不同的处理
方法.具体情况请参考后面的例子.

        if (left==mid )

习题2-2
#include <stdio.h>
int main()
{
int a,b,c;
for(int i=100;i<=999;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
if(i==a*a*a+b*b*b+c*c*c)
{
printf("%dn",i);
}
}
return 0;
}

/*----------------------------------------------------------------------------*/

        {  

习题2-3
#include <stdio.h>
int main()
{
int i,a,b,c;
scanf("%d%d%d",&a,&b,&c);
for(i=10;i<=100;i++)
{
if(i%3==a&&i%5==b&&i%7==c)
{
printf("%dn",i);
}
}
if(i==101)
{
printf("no answern");
}
return 0;
}

** 关于快排的一些小问题 **

                 if(  x.x==global [right].x)

习题2-4
#include <stdio.h>
int main()
{
int i,j,k,n;
scanf("%d",&n);
for(i=n;i>0;i--)
{
for(k=0;k<n-i;k++)
{
printf(" ");
}
for(j=0;j<2*i-1;j++)
{

1.快排是不稳定的,这个不稳定一个表现在其使用的时间是不确定的,最好情况(O(n))和最
坏情况(O(n^2))差距太大,我们一般说的O(nlog(n))都是指的是其平均时间.

                        return  right;

printf("#");
}
printf("n");
}
return 0;
}

2.快排是不稳定的,这个不稳定表现在如果相同的比较元素,可能顺序不一样,假设我们有
这样一个序列,3,3,3,但是这三个3是有区别的,我们标记为3a,3b,3c,快排后的结果不一定
就是3a,3b,3c这样的排列,所以在某些特定场合我们要用结构体来使其稳定(No.6的例子就
是说明这个问题的)

TAG标签:
版权声明:本文由永利平台娱乐发布于永利平台娱乐,转载请注明出处:今天翻到以前学快排的时候写的练习code,本文转