您的位置:首页 > 编程语言 > C语言/C++

C语言基础练习(四)

2017-12-12 13:56 399 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: