C语言基础练习(四)

  • 1、要求实现下面的函数,给定一个整数数组,找出其中三个整数,这三个整数进行加减法运算的结果最大,并返回这三个数字
    函数名:int *maximumNumbers(const int *nums, int numsSize)
    示例:
    输入:[12, 5, -5, 1, 4]
    返回:[12, 5, -5]
#include <stdio.h>
#include <stdlib.h>

int Jdz(int data);
int *maximumNumbers(const int *nums, int numsSize);

void main (void)
{
    int *nums = NULL, size = 0, i = 0, *max = 0;
    scanf ("%d", &size);
    nums = malloc(size * 4);
    for (i=0; i<size; i++)
        scanf ("%d", &nums[i]);
    max = maximumNumbers(nums, size);
    for (i=0; i<3; i++)
        printf("%d  ", max[i]);
    printf("\n");
    free (nums);
    free (max);         //释放malloc所申请的空间。
    return; 
}


int *maximumNumbers(const int *nums, int numsSize)
{
    int *max = NULL, i = 0, j = 0, *p[5] = {}; //
    max = (int *)malloc(12);     /// 若不使用malloc函数,该数组的值返回到主函数后可能会更改。
    *max = *(max+1) = *(max+2) = 0; //保证数组内初始值比Jdz(nums[]小)
    for (i=0; i<3; i++)
    {
        for (j=0; j<numsSize; j++)
            if ( Jdz(nums[j])>Jdz(*(max+i)) && p[i+1]!=&nums[j] && p[i]!=&nums[j])          //将已经取过的最大值排除
            {
                *(max+i) = nums[j];
                p[i+2] = &nums[j];   // 记录被取过的最大值的地址
            }
    }
    return max;
}

int Jdz(int data)
{
    if (data < 0)
        return -data;
    else
        return data;
}   
  • 2、小明是个间谍,现在他的任务是将一个整数n传给一个客户。但是他十分担心信号被窃取后,这个数字就暴露了。于是他决定换一种表达方式,他将n换成一个整数x,使得x减去x的每个位数上的数字后不小于n,那么最小的满足条件的x就是小明想找的。现在小明需要传送一个整数n,你能帮助他找到这个x么?
    如n=12, 当x=20时,20-2-0 >= 12
  • 输入描述:
    一个整数
  • 输出描述:
  • 输出一个整数x,表示伪装后的数字。
  • 输入样例:
    12
  • 输出样例:
    20
#include <stdio.h>

void main (void)
{
    int i = 0, n = 0, x = 0, q = 1, p = 0, m = 0, w = 0;
    scanf ("%d", &n);
    p = n;
    m = n + 1;
    w = m;
    while(1)
    {
        m = w;
        x = m;
        i = 0;
        while(m)
        {
            m = m / 10;
            i++;    //m的位数 
        }
        i--;
        q = 1;
        while(i)   
        {
            q *= 10;
            i--;
        }
        n = 0;
        while(x)
        {
            i = x / q;
            n += i;
            x -= q * i;
            q /= 10;
        }
        if ((w-n) >= p)
        {
            printf("%d\n", w);
            return;
        }
        else
            w++;
    }
    return;
}
  • 3、给定非负整数a,b,m,利用基本的算术运算符(+ - * / %)以及位运算符,计算a^b mod m。
  • 输入
    一行三个非负整数,分别为a b m的值,其中m不为0
  • 输出:
    a^b mod m的结果
  • 样例输入
    2 10 5
  • 样例输出
    4
#include <stdio.h>

void main (void)
{
    int i = 0, a = 0, b = 0, m = 0;
    a = 2;
    b = 10;
    m = 5;
    b--;
    while(b)
    {
        i = a * a;
        b--;
    }
    a = i % m;
    printf ("%d\n", a);
    return;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值