呵呵,发一个比较有趣的问题,大家可以尝试尝试阿...

tatty_bad 2005-12-23 09:08:20
大家都知道QQ的等级吧,是按照太阳、月亮、星星,来计算等级的。
换算规则是:
1个星星 = 10分
5个星星 换 1个月亮
5个月亮 换 1个太阳

定义太阳的图片为1.gif
定义月亮的图片为2.gif
定义星星的图片为3.gif

那么请大家写一个函数:

要求在不同的分数的时侯,根据分数来显示太阳、月亮、星星的图片。

比如说:135分=2个月亮+3个星星
342分=1个太阳+1个月亮+4个星星
714分=2个太阳+4个月亮+1个星星

有兴趣的可以尝试一下。。。昨天晚上我想了好一会儿,写了不少代码,最后发现原来我走了不少弯路。

呵呵,看看哪位写的代码最少。。。
...全文
252 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
tatty_bad 2005-12-27
  • 打赏
  • 举报
回复
to sjjf(水晶剑锋)
其实我这个问题也就需要三级,所以我在考虑的时候,就对于三级的情况下进行考虑了,没有往无限级方向去想。。。

你的更适合在不指定级数的情况下使用。。

还有就是狼的。。。
sjjf 2005-12-25
  • 打赏
  • 举报
回复
to xdspower() :
alert(26/7);
  • 打赏
  • 举报
回复

楼上正解 学习学习再学习
xdspower 2005-12-24
  • 打赏
  • 举报
回复
因为一般还需要保留原来的等级数,所以我这个不显式增加任何变量
命名N:等级,Sun:太阳,Moon:月亮,Star:星星
Star=int( N / 10 );
Sun=int( Star / 25 );
Moon=( Star % 25 )/5;
Star=Star % 5;
xdspower 2005-12-24
  • 打赏
  • 举报
回复
如果不用递归,代码也不多,其实这就是一个特殊的数值问题。
进位关系是
5,5,10
对于数值问题,效率高的是查表,而且因为地位的和显示没有关系,所以最地位的可以很简单的处理掉,变成一个10进制转换5进制的问题,而且最高位还是10进制的,所以变成只有几个除法而已
假定N是等级,太阳个数为Sun,月亮个数为Moon,星星个数为n
n=N/10
Sun=n/25
Moon=(n%25)/5
n=n%5
其它的用来显示的就不说了。/为整除,%为取余
biao1 2005-12-24
  • 打赏
  • 举报
回复
好贴 标记了
xtuwz 2005-12-24
  • 打赏
  • 举报
回复
愛動手的總是最棒的,我回頭也寫寫看
xutao888 2005-12-24
  • 打赏
  • 举报
回复
<script>
var Source;
var i;
Source = 276;
for(i=1;i<=Math.floor(Source/250);i++)
document.write("Sun");
Source = Source%250;
for(i=1;i<=Math.floor(Source/50);i++)
document.write("Moon");
Source = Source%50
for(i=1;i<=Math.floor(Source/10);i++)
document.write("Star");
</script>
tatty_bad 2005-12-23
  • 打赏
  • 举报
回复
狼,需要这样么???
我觉得复杂。。。
超级大笨狼 2005-12-23
  • 打赏
  • 举报
回复
靠,乱码。

<SCRIPT LANGUAGE="vbScript">

function f(x)
if x>250 then
re = re & int(x/250) & "个太阳 + "
f=f(x mod 250)
else
if x>50 then
re = re & int(x/50) & "个月亮 + "
f=f(x mod 50)
else
re = re & int(x/10) & "个星星"
end if
end if
end function
'test
dim re
dim a
a=1350
f(a)
alert re
</SCRIPT>
超级大笨狼 2005-12-23
  • 打赏
  • 举报
回复
<SCRIPT LANGUAGE="vbScript">
'简单的递归而已
function f(x)
if x>250 then
re = re & int(x/250) & "¸öÌ«Ñô + "
f=f(x mod 250)
else
if x>50 then
re = re & int(x/50) & "¸öÔÂÁÁ + "
f=f(x mod 50)
else
re = re & int(x/10) & "¸öÐÇÐÇ"
end if
end if
end function


'test
dim re
dim a
a=1350
f(a)
alert re
</SCRIPT>
tatty_bad 2005-12-23
  • 打赏
  • 举报
回复
for i=1 to first
Response.Write("<img src='1.gif'>")
next
for j=1 to sec
Response.Write("<img src='2.gif'>")
next
for k=1 to third
Response.Write("<img src='3.gif'>")
next
这一段改成String不是更好?呵呵
wxf0104 2005-12-23
  • 打赏
  • 举报
回复
有点意思,试试先。
it_farmer 2005-12-23
  • 打赏
  • 举报
回复
有幸趣
<%
Public function gif(num)
dim i,j,k,first,sec,third
first=int(num/250)
sec=int((num mod 250)/50)
third=int(num/10) mod 5
for i=1 to first
Response.Write("<img src='1.gif'>")
next
for j=1 to sec
Response.Write("<img src='2.gif'>")
next
for k=1 to third
Response.Write("<img src='3.gif'>")
next
end function
%>
<%=gif(135)%>
我也写了这么多。
tatty_bad 2005-12-23
  • 打赏
  • 举报
回复
呵呵,尝试之后才知道乐趣所在。。。
3楼的思路与我刚开始相同。。。。
lisoon 2005-12-23
  • 打赏
  • 举报
回复
总分除于250,得出有没有太阳,总分-太阳个数*250/50得出星数量..依此类推,不难。都有五倍的关系,我想应该可以用递规,这样才是最短的。

amandajj 2005-12-23
  • 打赏
  • 举报
回复
这个问题有趣啊,我已经开始写了哟。
对于这类问题,好像思路很重噢。
sjjf 2005-12-23
  • 打赏
  • 举报
回复
to tatty_bad(我总是出现在该出现的地方) :
如果只有三个等级情况下,你的做法是最优的。这个问题实质类似,不同的进制数的转换。略不同的是,每一个位的权都可能不一样。你的做法是手工展开,如果等级不是三个,而是四个,改动范围几乎是全部的。从定义变量到构造显示串。
如果等级增加一倍,那么代码量就不止一倍了。
如果把等级和对应的分数改成从文件中配置呢? 而且可以从中配置任意多的等级呢?任意改变等级的定义呢?
tatty_bad 2005-12-23
  • 打赏
  • 举报
回复
这是我写的。。。大家讨论讨论,我觉得这样就可以做到,判断,都不可以不要的

Function GetPic(UserNum)
Dim TaiYNum,YueLNum,XingXNum,TNum,YNum,XNum,TaiYY,YueLY,XingXY
TaiYNum = 250
YueLNum = 50
XingXNum = 10

TNum = 0
YNum = 0
XNum = 0

TNum = UserNum \ TaiYNum
TaiYY = UserNum Mod TaiYNum
YNum = TaiYY \ YueLNum
YueLY = TaiYY Mod YueLNum
XNum = YueLY \ XingXNum
XingXY = YueLY Mod XingXNum

GetIt = String("<img src=1.gif>",TNum) & String("<img src=1.gif>",YNum) & String("<img src=1.gif>",DNum)

End Function
usaspy 2005-12-23
  • 打赏
  • 举报
回复
int score = 761
int i = 10;
int j = 50;
int x = 250;

int tmp1 = 0;
int tmp2 = 0;
int tmp3 = 0;

if(score/x >= 1){
tmp3 = score/x;
}

if((score-tmp3*x)/j >= 1){
tmp2= (score-tmp3*x)/j;
}

if((score-tmp3*x-tmp2*j)/i) >=1){
tmp1=(score-tmp3*x-tmp2*j)/i)
}


for(int a=1;a<=tmp3;a++){
out.println("3.gif");
}
for(int a=1;a<=tmp2;a++){
out.println("2.gif");
}
for(int a=1;a<=tmp1;a++){
out.println("1.gif");
}
加载更多回复(4)
最近有人说下不了,我看了一下,能下载,多尝试几次~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 找来一个很有用的声卡驱动解决方案,是我尝试了n次(不下20)还搭上某人的辛苦劳动,才成功让我的Win7出声音的!!!以下是引用本站“实话实说”的博客。。。 你看到这篇文章时候估计你快被windows7无法安装声卡驱动而崩溃了,呵呵,别急,这篇文章是你的救星,本人已经试验多台电脑,完美解决windows7声卡驱动安装失败这一问题 有个前提,你已经有适合自己机子声卡驱动就是总是安装失败,若没有声卡驱动可以用驱动人生(或者其他驱动检测设备)检测并下载适合自己的驱动以备下一步使用。 闲话少说,正文: 1.先下载解压 windows7声卡驱动修复 压缩包。 2.打开你系统的所在盘进入Windows-system32-Driverstore-FileRepository在里面找到wdmaudio.inf_x86_neutral_aed2a4456700dfde文件夹. 一个一个慢慢找吧别着急. 4.再进入(wdmaudio.inf_x86_neutral_aed2a4456700dfde)文件夹把里面的东西全删了(删不掉,因为需要管理员权限 ,用windows7 优化大师 -->系统设置--->又键设置--->获取管理员权限(文件\文件夹)--应用到系统,然后对删不掉的文件点右键 --获取管理员权限---删除) 5.回到你刚刚解压的文件夹 6.把里面文件全部复制粘贴到wdmaudio.inf……文件夹里面 7.重新安装声卡驱动. 8.重启ok 问题解决了 如果没有WIN7驱动程序,用vista的也可以

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧