Chinaunix

标题: 如何从数组中查找最接近500的数字! [打印本页]

作者: zhangfenyun    时间: 2014-04-01 16:04
标题: 如何从数组中查找最接近500的数字!
   假如有一个数值,里面的数字都是按照大小排列好了的!

    数值A里面的值有:250  300 350 400 450  600 700 800

   要赋予一个值给函数B,但是这个值必须不能大于500!可以等于500 (这个实例就是给函数B为450)


   1,首先判断这个数组里面有没有500,如果有,那么函数B赋予500

   2,再判断这个数组里面有没有450,如果有,那么函数B赋予450


   3,再判断这个数组里面有没有400,如果有,那么函数B赋予400

  4,再判断这个数组里面有没有350,如果有,那么函数B赋予350

  5,再判断这个数组里面有没有300,如果有,那么函数B赋予300
  6,再判断这个数组里面有没有250,如果有,那么函数B赋予250

  7,最后判断:如果这个数组里面所有的值都大于500,那么就函数B赋予500

  1,2,3,4,5,6,7点问题依次去判断

作者: huang6894    时间: 2014-04-01 16:32
一个笨方法:
  1. @a=(250,300,350,400,450,600,700,800);
  2. $p=0;
  3. foreach $tmp (@a){
  4. if (($p lt $tmp)&&($tmp lt 501)){
  5.     $p=$tmp;
  6. }
  7. }print $p;
复制代码
我刚开始学perl,不要见怪
作者: huang6894    时间: 2014-04-01 16:47
本帖最后由 huang6894 于 2014-04-01 17:05 编辑
  1. @a=(250,300,350,400,450,600,700,800);
  2. foreach $tmp (@a){
  3.     $p=($tmp<500)?$tmp:$p
  4. }
  5. $t=($p)?$p:500;
  6. print $t;
复制代码

作者: jason680    时间: 2014-04-01 16:54
回复 1# zhangfenyun

use strict;
use warnings;

my @aData = (250,300,350,400,450,600,700,800);
my $sN500 = get_num(500, @aData);
print "$sN500\n";

sub get_num{
  my($sNum, @aData) = @_;
  my $sRet = "";
  foreach (@aData){
    if($_ <= $sNum){
      if($sRet eq ""){
        $sRet = $_;
      }
      elsif($sRet < $_){
        $sRet = $_;
      }
    }
  }
  return $sRet eq "" ? $sNum : $sRet;   
}
   
作者: pitonas    时间: 2014-04-01 17:42
  1. 1,首先判断这个数组里面有没有500,如果有,那么函数B赋予500
复制代码
如果没有,那么函数B赋予 ?
作者: zhangfenyun    时间: 2014-04-01 18:54
  高!!!   佩服大家
作者: flw    时间: 2014-04-01 18:57
use List::MoreUtils qw(last_value);

my $B = last_value { $_ <= 500 } @A or 500;
print $B;


作者: zhangfenyun    时间: 2014-04-01 19:03
佩服大家!我也是新学的!我的QQ:251546505

想跟大家一起学习
作者: 104359176    时间: 2014-04-01 20:27
本帖最后由 104359176 于 2014-04-01 20:29 编辑

我的汉语是在太差了,不知道问题是不是这样:

有一个数字数组A,里面的数字都是按照大小排列好了的!例如: 250  300 350 400 450  600 700 800

要赋予一个值给变量B, 这个值必须不能大于500!可以等于500 (这个实例就是给变量B为450)

规则:

   1,首先判断这个数组里面有没有500,如果有,那么变量B赋予500

   2,再判断这个数组里面有没有450,如果有,那么变量B赋予450

   3,再判断这个数组里面有没有400,如果有,那么变量B赋予400

  4,再判断这个数组里面有没有350,如果有,那么变量B赋予350

  5,再判断这个数组里面有没有300,如果有,那么变量B赋予300
  6,再判断这个数组里面有没有250,如果有,那么变量B赋予250

  7,最后判断:如果这个数组里面所有的值都大于500,那么就变量B赋予500

  1,2,3,4,5,6,7点问题依次去判断
作者: zhangfenyun    时间: 2014-04-01 21:31
是啊

谢谢大家,问题是那样的!
作者: rubyish    时间: 2014-04-01 22:51
  1. #!/usr/bin/perl

  2. sub pick {
  3.     return 500 if $_[0] >= 500;
  4.     $_ <= 500 and return $_ for reverse @_;
  5. }

  6. sub pick2 {
  7.   return $_[-1] if $_[-1] <= 500;
  8.   my $one = 500;
  9.   $_ <= 500 ? ($one = $_) : return $one for @_;
  10. }
  11.    
  12. while (<DATA>) {
  13.     my $one = pick2 split;
  14.     print "$one\t<= $_";
  15. }

  16. __DATA__
  17. 250  300 350 400 450  600 700 800
  18. 250  300 350 400 450  500 600 700 800
  19. 600 700 800 900
  20. 250  300 350 400 450
复制代码

作者: rubyish    时间: 2014-04-01 23:05
回复 1# zhangfenyun

better:
  1. 有一个数值:
  2. example:

  3. 250  300 350 400 450  600 700 800

  4. 1: 里面的数字都是按照大小 (小 -> 大) 排列好了的!
  5. 2: 查找最接近 500 的数字 N ( N <= 500 ), 不能大于 500
  6. 3: 如果这个数组里面所有的值都大于500,那么 N = 500
复制代码

作者: q1208c    时间: 2014-04-02 08:26
回复 12# rubyish

其实这个命题是有问题的.

从技术上来说, 当数组里有小于500的值的时候, N 取最接近500的值, 这很容易理解. 但当数组里没有小于500的值的时候, N 应该取0, 否则怎么能够知道是数组里根本没有小于500的数, 还是 数组里正好有个 500 呢?

这不科学呀.
   
作者: xiumu2280    时间: 2014-04-02 09:01
本帖最后由 xiumu2280 于 2014-04-02 09:04 编辑

我怎么感觉楼主的意思是取小于500且距离500最远的值···
好吧···B是不能重复赋值的··
rubyish 发表于 2014-04-01 23:05
回复 1# zhangfenyun

better:

作者: zhangfenyun    时间: 2014-04-02 22:18
说白 了,是取距离500最近的值呀?可以是500,但是不能超过500
作者: zhangfenyun    时间: 2014-04-03 14:53
#!/usr/bin/perl
@a=(1,400,500,600,700,800,900);
foreach $tmp (@a){
    $p=($tmp<500)?$tmpp
}
$t=($p)?$p:500;
print $t;   #为什么是400





作者: rubyish    时间: 2014-04-04 01:30
回复 16# zhangfenyun
@a = ( 1, 400, 500, 600, 700, 800, 900 );


$p = ($tmp < 500) ? $tmp : p;
$tmp < 500 => 400
$tmp <= 500 => 500
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2