A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘胜寒 金牌黑马   /  2013-4-10 10:55  /  2154 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘胜寒 于 2013-4-12 10:56 编辑

描述

挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下;然后滴二滴,停一下;再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速度是一秒(假设最后一滴不到D毫升,则花费的时间也算一秒),停一下的时间也是一秒这瓶水什么时候能挂完呢?

输入

输入数据包含多个测试实例,每个实例占一行,由VUL和D组成,其中 0<D<VUL<5000。

输出

对于每组测试数据,请输出挂完盐水需要的时间,每个实例的输出占一行。

样例输入

10 1
样例输出

13

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

11 个回复

正序浏览
次数和停顿时间分开,然后求解

点滴测试.png (41.2 KB, 下载次数: 21)

点滴测试.png
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
本帖最后由 嘟嘟123 于 2013-4-11 19:06 编辑
  1. import java.util.Scanner;
  2. public class T7 {
  3.         private static Scanner sc;
  4.         public static void main(String[] args) {
  5.                sc = new Scanner(System.in);
  6.               System.out.println("请输入VUL的值:");
  7.               double VUL = sc.nextDouble();
  8.               System.out.println("请输入D的值:");
  9.                 double D = sc.nextDouble();
  10.                 int i,sum,vul;
  11.                 double test;
  12.                 vul = (int) (VUL/D);
  13.                 test =vul;
  14.                 if (test != VUL/D) {
  15.                         vul++;
  16.                         }
  17.                         i=1;
  18.                         sum = 0;
  19.                 while (sum<vul) {
  20.                         sum += i;
  21.                         ++i;
  22.                 }
  23.                 sum = vul + i -2;
  24.                 System.out.println("sum="+sum);
  25.         }
  26. }

复制代码

1.jpg (13.24 KB, 下载次数: 17)

1.jpg

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
谢达 中级黑马 2013-4-11 11:01:05
9#
//lz的思路简洁
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class SalineDemo {
        private Saline s ;
        private int d ; //每一滴毫升
        private long seconds ; //所需时间
        public SalineDemo(int vul,int d){
                s = new Saline(vul);
                this.d = d;
        }
       
        public void useTime(){
                int count =1;  //记录每次盐水连续滴的数量
                while(!s.isEmpty()){  //判断盐水瓶是否为空
                        for(int i=0;i<count &&!(s.isEmpty());i++){  //每次连续滴的数量
                                s.use(d);
                                seconds++;  //秒数加1
                        }
                        if(!s.isEmpty()) //滴完一轮后判断盐水是否为空,不为空则停顿一秒
                                seconds++;
                        count++;//下次连续滴的次数
                }
               
        }
        public long getSeconds(){
                return seconds;
        }
       
        public static void main(String[] args) throws IOException {
                System.out.println("请输入盐水的容量(VUL),和每滴的毫升数(D) (0<D<VUL<500,over结束)");
                //保存用户输入多组数据的信息
                ArrayList<SalineDemo> sds = new ArrayList<SalineDemo>();
                BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
                String info ="";
                SalineDemo sd =null;
                while(!("over".equals(info=in.readLine()))){
                        String [] strs= info.split(" ");
                        int vul = Integer.valueOf(strs[0]);
                        int d =Integer.valueOf(strs[1]);
                        if(d<0 ||d>vul ||vul>500)
                                throw new RuntimeException("你输入的本组数据不符合要求");
                        sd = new SalineDemo(vul,d);
                        sds.add(sd);
                }
               
                for(SalineDemo temp : sds){
                        temp.useTime();
                        System.out.println(temp.getSeconds());
                }
               
        }

}




class Saline{
        private int vul ; //盐水容量
        public Saline(int vul){
                this.vul = vul;
        }
       
        public int getVul(){
                return this.vul;
        }
        public boolean isEmpty(){
                return vul ==0 ? true : false;
        }
       
        public void use(int num){
                vul =(vul-num) <0 ? 0:(vul-num) ;
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘胜寒 于 2013-4-11 10:48 编辑

计算方程x^2+y^2+z^2= num的一个正整数解。
这个题目说一下思路  用三个for 循环嵌套就行了

for(int i=1;i<100)
{
if(i*i>=num)break;
for(int j=i;j<100;j++)
{  if(i*i+j*j>=num) break;
for(int k=j;k<100;k++)
{
    int tmp = i*i +j*j + k*k;
   if(tmp==num) SOP(i  j  k);
   if(tmp>num)break;
}
}
}

就是这么个意思
回复 使用道具 举报
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.lang.Math.*;

  4. class Main
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 Scanner cin = new Scanner(System.in);
  9.                 int ans, VUL, D;
  10.                 while(cin.hasNext())
  11.                 {
  12.                         VUL = cin.nextInt();
  13.                         D = cin.nextInt();
  14.                         ans = (int)( Math.ceil(VUL/D));
  15.                         while(VUL>0)
  16.                         {
  17.                                 ans+=1;
  18.                                
  19.                                 VUL-=D;
  20.                                 D++;
  21.                         }
  22.                         System.out.println(ans-1);
  23.                 }
  24.         }
  25. }
复制代码
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {double  v,d,n,i,j,m;
  5. while(cin>>v>>d)
  6. {
  7. int sum=0,t=0,s;
  8. for(i=1;i<=1100;i++)// 可以用求解一元二次方程求出n的值
  9. {
  10.   if(((i+1)*i*d/2)>=v)
  11.   {n=i;
  12.   break;}
  13.      
  14. }
  15.   v=v-(i-1)*i*d/2;
  16.   m=v/d;
  17.   s=m;
  18.   if(m>s)
  19.    m=m+1;
  20.   t=(n-1)*n/2+n-1+m;
  21.   cout<<t<<endl;
  22. }
  23.   return 0;

  24. }
复制代码
把滴水的时间和停一下的时间分开...
这就是思路了.....
上面第一个是java语言
后面是c语言

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
刘胜寒 发表于 2013-4-11 08:25
艹泥煤啊.....
这都没思路....
搞毛啊...

还没有学到。有些东西都看不懂。
回复 使用道具 举报
陈宇鹏 发表于 2013-4-10 22:35
我去啊。。。完全没有思路。
这是不是证明我不是正常人。
我是低智商人才。。。。 ...

艹泥煤啊.....
这都没思路....
搞毛啊...
回复 使用道具 举报
我去啊。。。完全没有思路。
这是不是证明我不是正常人。
我是低智商人才。。。。{:soso_e105:}
回复 使用道具 举报
输入数据包含多个测试实例,每个实例占一行,由VUL和D组成,其中 0<D<VUL<5000。
输出

对于每组测试数据,请输出挂完盐水需要的时间,每个实例的输出占一行。

样例输入

10 1
样例输出

13
输出

对于每组测试数据,请输出挂完盐水需要的时间,每个实例的输出占一行。

样例输入

10 1
样例输出

13
看不明白,输入数据包含多个测试实例是什么要求?是从键盘输入多个?还是定义成函数 函数可以传入可变的参数来处理?还是传入字符串切割。。。还是就是一个数据包例如txt文件。。。
输出样式:如果是多个是
样例输入1

10 1
样例输出1

13
样例输入2

10 1
样例输出2

13
.
.
这种形式还是
样例输入

10 1
11 2
样例输出

13
12
这种样式。。。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
描述

你的任务是:
计算方程x^2+y^2+z^2= num的一个正整数解。

输入

输入数据包含多个测试实例,每个实例占一行,仅仅包含一个小于等于10000的正整数num。

输出

对于每组测试数据,请按照x,y,z递增的顺序输出它的一个最小正整数解,每个实例的输出占一行,题目保证所有测试数据都有解。

样例输入

3
样例输出

1 1 1






免费送上一个


两个问题的答案明天奉上....
答案可能会有部分注释
记住是可能....

评分

参与人数 1黑马币 +9 收起 理由
张熙韬 + 9

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马