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
一个笨方法:
@a=(250,300,350,400,450,600,700,800);
$p=0;
foreach $tmp (@a){
if (($p lt $tmp)&&($tmp lt 501)){
$p=$tmp;
}
}print $p;
复制代码
我刚开始学perl,不要见怪
作者:
huang6894
时间:
2014-04-01 16:47
本帖最后由 huang6894 于 2014-04-01 17:05 编辑
@a=(250,300,350,400,450,600,700,800);
foreach $tmp (@a){
$p=($tmp<500)?$tmp:$p
}
$t=($p)?$p:500;
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,首先判断这个数组里面有没有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
#!/usr/bin/perl
sub pick {
return 500 if $_[0] >= 500;
$_ <= 500 and return $_ for reverse @_;
}
sub pick2 {
return $_[-1] if $_[-1] <= 500;
my $one = 500;
$_ <= 500 ? ($one = $_) : return $one for @_;
}
while (<DATA>) {
my $one = pick2 split;
print "$one\t<= $_";
}
__DATA__
250 300 350 400 450 600 700 800
250 300 350 400 450 500 600 700 800
600 700 800 900
250 300 350 400 450
复制代码
作者:
rubyish
时间:
2014-04-01 23:05
回复
1#
zhangfenyun
better:
有一个数值:
example:
250 300 350 400 450 600 700 800
1: 里面的数字都是按照大小 (小 -> 大) 排列好了的!
2: 查找最接近 500 的数字 N ( N <= 500 ), 不能大于 500
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)?$tmp
p
}
$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