今天遇到一个有趣的sql,练习一下
题目:一家冷饮店,一瓶汽水1元钱,喝完汽水后,用2个空瓶可以换1瓶汽水,若你有20元钱,最多可以喝到几瓶汽水?(用sql写出)
用表格列出过程:
如果没有思路时,可以先用程序写出结果,其过程和sql差别不大
int func(int m) { int n=1, s; //n:这次新换的,s:上一次换过之后剩余的 int sum = m; //初始化总换取的数量为所给钱数 while (n!=0) { n = m / 2; s = m % 2; m = n + s; sum = sum + n; } return sum; }
注:具体代码其实和sql写法大致差不多
用同样的思路,转换为sql,运行结果:
declare @n int -- 上次换掉剩余的的旧空瓶 declare @m int -- 当前一共有的空瓶数 declare @s int -- 总共喝的瓶数 declare @sum int -- 总共喝的瓶数 -- m(当前一共有的空瓶数)=n(上次新换的瓶子)+s(上次换掉剩余的的旧空瓶) set @m = 20 set @n = 1 set @sum = @m WHILE @n != 0 BEGIN SET @n = @m / 2 SET @s = @m % 2 SET @m = @n + @s SET @sum = @sum + @n END print @sum