专栏首页python3C语言 基础题

C语言 基础题

第1题 int sum_nth(unsigned int num, unsigned int n); 功  能:求出给定自然数的指定位置的数字(个位为0,十位为1,......) 参  数:num为给定的自然数;n为指定位置. 返回值:>=0,给定自然数的指定位置的数字; <0,不成功. 分  值:

//第1题
int sum_nth(unsigned int num,unsigned int n){
    if(num>=0){
        unsigned int i;
        if(num>10){
            for(i=1;i<=n;i++){
                num=num/10;
                if(num<10 && (n-i)>0)
                    return -1;
            } 
        }
        num=num%10;
        return num;
    }else{
    return -1;
    }
}

第2题 int sum_square(unsigned int num); 功  能:求出给定自然数的各位数字的平方和(例如 自然数1234的各位数字的平方和为30) 参  数:num为给定的自然数. 返回值:>=0,给定自然数的各位数字的平方和;<0,不成功. 分  值:

//第2题
int sum_square(unsigned int num){
    int sum=0;
    int temp;
    while(num>10){
        temp=num%10;
        sum=sum+temp*temp;
        num=num/10;
    }
    sum=sum+num*num;
    return sum;
}

第3题 int sort_acend(double* array, unsigned int n); 功  能:对给定数组中的数按升序排序 参  数:array为给定的数组;n为数组中元素的个数. 返回值:>=0,成功排序; <0,不成功. 分  值:

//第3题
//使用选择排序算法
int sort_ascend(double *arry, unsigned int n){
    unsigned int i,k;
    unsigned int lowIndex;
    for(i=0;i<n;i++){
        lowIndex=i;
        for(k=i+1;k<n;k++){
            if(*(arry+k)<*(arry+i))
                lowIndex = k;
        }
        double temp=*(arry+i);
        *(arry+i)=*(arry+lowIndex);
        *(arry+lowIndex)=temp;
    }

    bool flag1=true;
    for(i=0;i<n-1;i++){
        if(*(arry+i)<*(arry+i+1) && flag1){
            flag1=true;
        }else{
            flag1=false;
        }
    }
    
    if(flag1)
        return 1;
    return -1;
}

第4题 int sort_decend(double* array, unsigned int n); 功  能:对给定数组中的数按降序排序 参  数:array为给定的数组;n为数组中元素的个数. 返回值:>=0,成功排序; <0,不成功. 分  值:

//第4题
//插入排序算法
int sort_descend(double *arry, unsigned int n){
    unsigned int i,k;
    for(i=1;i<n;i++){
        for(k=i;k>0;k--){
            if(*(arry+k)>*(arry+k-1)){
                double temp=*(arry+k);
                *(arry+k)=*(arry+k-1);
                *(arry+k-1)=temp;
            }    
        }
    }
    bool flag1=true;
    for(i=0;i<n-1;i++){
        //printf("\n%.2f\n",*(arry+i));
        if(*(arry+i)>*(arry+i+1) && flag1){
            flag1=true;
        }else{
            flag1=false;
        }
    }
    
    if(flag1)
        return 1;
    return -1;
}

第5题 int search_bin(int* array, unsigned int n, int value); 功  能:用二分检索法(也称折半法,字典法等)找出给定数值在数组中位置的下标值 参  数:array为给定的数组;n为数组中元素的个数; value为要查找的数值. 返回值:>=0, 给定数值在数组中位置的下标; <0,未找到. 分  值:

//第5题
//二分检索法
int search_bin(int* array, unsigned int n, int value){
    
    int low=0,high=n-1,mid;//置当前查找区间上、下界的初值
    while(low<=high){
        if(*(array+low)==value)
            return low;
        if(*(array+high)==value)
            return high;
        //当前查找区间array[low..high]非空
        mid=low+((high-low)/2);
        //使用(low+high)/2会有整数溢出的问题
        if(*(array+mid)==value)
            return mid;//查找成功返回
        if(*(array+mid)<value)
            low=mid+1;//继续在array[mid+1..high]中查找
        else
            high=mid-1;//继续在array[low..mid-1]中查找
     
    }
    if(low>high)
        return-1;//当low>high时表示所查找区间内没有结果,查找失败
}

第6题 unsigned int factorial(unsigned int n); 功  能:求给定自然数的阶乘。 参  数:n为给定的自然数. 返回值:给定数的阶乘n!. 分  值:

//第6题

unsigned int factorial(unsigned int n){
    if(n==0||n==1){
        return 1;
    }else{
        return n*factorial(n-1);
    }

}

第7题 char*   strn2b(unsigned int n); 功  能:求出给定自然数的二进制字符串表示(例如,5的二进制字符串表示为“101”) 参  数:n为给定的自然数. 返回值:二进制字符串数组的首地址. 分  值:

//第7题
char*   strn2b(unsigned int n){
     char arr[32]={};//因为是无符号整数,所以二进制表示最长为32位
    for(int i=31;i>=0;i--){
        if((n & 0x1)==1){
            arr[i]='1';
        }else{
            arr[i]='0';
        }
        n=(n>>1);
    }

    return arr;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [开发]Python实现运维监控服务器硬

          今天通过使用Python开发针对服务器硬件运行状态的监控,简单了解下在虚拟环境中的运维监控的实现,算是给全面研究云计算开一个头。

    py3study
  • 从rand(5)生成rand(7),从r

     我们先来看这样一个问题, 已知rand5能等概率产生1, 2, 3, 4, 5, 现要用rand5来实现rand7(rand7的意思是要等概率产生1, 2, ...

    py3study
  • Java 3:顺序表的操作

    顺序表常见操作有插入、删除、查找、修改。 一、插入: 1.插入有头插、尾插、任意位置插入。在插入时要注意下标的取值在顺序表长度范围内。所以最好在插入之前进行扩容...

    py3study
  • Hackerrank GCD Product(莫比乌斯反演)

    attack
  • 【PAT甲级】1002 A+B for Polynomials (25分)

    This time, you are supposed to find A+B where A and B are two polynomials.

    韩旭051
  • BZOJ4552: [Tjoi2016&Heoi2016]排序(线段树 二分)

    首先二分一个答案,表示假设询问的位置为$x$,把$>= x$的看成$1$,$< x$的看成$0$

    attack
  • 【USACO 2.1】The Castle

    饶文津
  • 洛谷P4424 [HNOI/AHOI2018]寻宝游戏(思维题)

    那么我们把每一列上的数和他之前的操作符分别拿出来看成一些序列,显然这个序列要满足最后一个\(\mid 1\)要在\(\& 0\)之后

    attack
  • 1466: [蓝桥杯2019初赛]等差数列

    数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N 个整数。现在给出这N 个整数,小明想知道包含这N 个整数的最短的等差数...

    可爱见见
  • 洛谷P3437 [POI2006]TET-Tetris 3D(二维线段树 标记永久化)

    对于这题来说,因为有修改操作,我们需要在外层线段树上也打标记,而且标记的形式是对一段区间赋值。所以我们对每个标记需要开线段树来维护更改的位置

    attack

扫码关注云+社区

领取腾讯云代金券