编程之美 - 写一个函数,返回数组中所有元素被第一个元素除的结果

问题:

写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己

分析:

主要注意两点:1,判断输入是否合法;2,判断除数是否为0;3,从后往前除(真猥琐)

代码实现:

 1 /* div_array.cc
 2 *  2014/09/03 create
 3 *  写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己
 4 */
 5 #include <iostream>
 6 using namespace std;
 7
 8 void div_array(int* parray, int size) {
 9     //判断输入是否合法
10     if(parray == NULL || size == 0)
11         return;
12     //判断除数是否为0
13     if(parray[0] == 0)
14         return;
15     //从后往前除以第一个元素
16     for(int i = size -1 ; i >= 0; i--)
17         parray[i] /= parray[0];
18 }
19
20 int main() {
21     int array[5] = {3, 12, 7, 5, 1} ;
22     div_array(array, sizeof(array)/sizeof(array[0]));
23     for(int i = 0; i < sizeof(array)/sizeof(array[0]); i++)
24         cout << array[i] << " ";
25     return 0;
26 }

输出:

$ ./a.exe
1 4 2 1 0
时间: 2024-12-25 03:14:43

编程之美 - 写一个函数,返回数组中所有元素被第一个元素除的结果的相关文章

[编程之美]写一个函数,返回一个数组中所有元素被第一个元素除的结果

题目: 写一个函数,返回一个数组中所有元素被第一个元素除的结果: 错误的版本: void DivArray(int *array, int n) { for (int i = 0; i < n; ++i) { array[i] /= array[0]; } } 错误原因:在循环的第一步,第一个元素就变成了1,然后再用它去除以其他元素,就不符合题目要求了 改进: 1:使用其他变量保存第一个元素: void DivArray3(int *array, int n) { assert(array !=

写一个函数实现数组中的元素随机乱序排序

//原生JS写一个函数实现一个shuffle方法,将数组中的元素随机乱序排序 var shuffle = function(arr){ var len,t,rand; for(var i =0;len = arr.length,i<len;i++){ rand = parseInt(Math.random()*len);//parseInt(Math.random()*(len-1-0)+1);或者rand = Math.floor(Math.random()*(len-1-0)+1);即Mat

写一个方法求数组中的最大值,最小值,总和以及平均值。

class Program { /// <summary> /// 求数组中的最大值,最小值,总和以及平均值. /// </summary> /// <param name="nums">输入一个数组</param> /// <returns>返回一个新的数组(max,min,sum,avg)</returns> public static int[] GetMaxMinSumAvg(int[] nums) { i

用C语言写一个函数返回参数二进制中1的个数

首先,给出正确的C语言代码如下: #include <stdio.h> int count_one_bits(unsigned int value) { int count =0; while(value) { if(value%2==1) { count++; } value=value/2; } return count; } int main() { unsigned int num=0; int ret=0; scanf("%d",&num); ret=co

写一个函数返回参数二进制中 1 的个数

#include<stdio.h>int main(){   int num; int s=0,ys=0,count=0;  printf("请输入一个数字:");    scanf("%d",&num);     for(s=num;s>=1;)     {     ys=s%2;         s=s/2;         if (ys==1)      {    count++;         }     }    printf(

写一个函数返回参数二进制中 1 的个数 比如: 15 &nbsp; &nbsp; 0000 1111 &nbsp; &nbsp; 4 个 1

方法一: 程序: #include<stdio.h> int  count_one_bits(int t) { int i = 32; int count = 0; while (i>0) { if (t & 1 == 1) { count++; } //t=t/2 t = t >> 1; i -= 1; } return count; } int main() { int t = 0; printf("请输入一个整数:"); scanf(&quo

写一个函数返回参数二进制中1的个数

分析: (1)输入一个数 (2)判断它是否为0. (3)如果不为0,就对它进行模2取余,模2的过程就相当于把这个数向右移除了一位,如果余数为1,则证明移除的这一位为1,就将其记录下来.如果余数为0,就证明移除的这一位为0,就不记录. (4)经过第3步以后,对这个数进行除2取整,再进入到第2步中.如此循环,直到第3步中判断为0. 注意: (1)对于负数,在内存中是以其补码形式存放的.例如-1,它的二进制中有32个1. (2)以下方法中对于函数形参的定义方式有两种,一种是无符号整型,一种是有符号整型

写一个函数返回参数二进制中 1 的个数(三种方法)

1.运用了除法,取余方式递推出结构2.运用右移符(>>)运算3.利用算术与(&)运算 三种方法效率越来越高,减少成本 #include<stdio.h> int Number1(int n) { int k; int count=0; while (n > 0) { k = n % 2; n /= 2; if (1 == k) { count++; } } return count; } int Number2(int n) { int count = 0; whil

手写索引函数索引数组中的最大值

#include <stdio.h> int  qmax(int a[ ] ,int len)                         //自定义取最大值的函数 {   int maxx=0; for (int i=0;i<len;i++) { if (a[i]>maxx) {                maxx=a[i]; } }       return  maxx; }  void main() { int b[6]={12,4,5,43,53,3}; print