C语言基础练习(四)
2017-12-12 13:56
399 查看
1、要求实现下面的函数,给定一个整数数组,找出其中三个整数,这三个整数进行加减法运算的结果最大,并返回这三个数字
函数名:int *maximumNumbers(const int *nums, int numsSize)
示例:
输入:[12, 5, -5, 1, 4]
返回:[12, 5, -5]
2、小明是个间谍,现在他的任务是将一个整数n传给一个客户。但是他十分担心信号被窃取后,这个数字就暴露了。于是他决定换一种表达方式,他将n换成一个整数x,使得x减去x的每个位数上的数字后不小于n,那么最小的满足条件的x就是小明想找的。现在小明需要传送一个整数n,你能帮助他找到这个x么?
如n=12, 当x=20时,20-2-0 >= 12
输入描述:
一个整数
输出描述:
输出一个整数x,表示伪装后的数字。
输入样例:
12
输出样例:
20
3、给定非负整数a,b,m,利用基本的算术运算符(+ - * / %)以及位运算符,计算a^b mod m。
输入
一行三个非负整数,分别为a b m的值,其中m不为0
输出:
a^b mod m的结果
样例输入
2 10 5
样例输出
4
函数名: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; }