2017-01-31 62 views
-1

問題可見衣服的數量:計數可見尋找繩索

衣服

一位女士最近聘請女傭她的家務勞動,照顧,使她可以集中精力建立自己的新業務。作爲日常工作的一部分,女僕每天清理房子並洗衣服。

但是,繩子上的衣服乾燥存在問題。由於繩子很小,所有的衣服都不能正常展開,因此女傭將一塊布放在另一塊布的頂部。所以有些衣服是部分或全部被其他人覆蓋的。瞭解衣服被掛起的順序和位置,確定從正面看時可以看到多少衣服(部分或完全)。

考慮繩子長度爲N米,分爲N等分,從0開始到N。寬度P的每塊布料完全佔據一個或多個部分。 (1 < = P < = N & P是+ ve整數)。

(注:忽略的布另一維度針對此問題的目的) 輸入規格 你的程序必須讀三個參數RopeLength,CountofClothes,ClothesPosition []其中 RopeLength是以米爲單位的繩索的長度(1 < = RopeLength < = 10000) CountofClothes是放置在繩子上的衣服的數量(1 < = CountofClothes < = 10000) ClothesPosition是一個給出掛衣服位置的數組。布的位置由兩個整數L和W來描述,其中L表示布懸掛的起始位置(0 < = L < = 10000),W是布的寬度(1 < = W < = W000) 。

接收輸入的順序是衣服放置在繩索上的順序。 輸出規格 您的函數GetVisibleCount應將輸出變量'output1'設置爲衣服可見的計數完全或部分。

例 樣品輸入:

10:5:{{0,4},{6,3},{1,5},{6,4},{7,2}} 

這裏10爲以米繩的長度。 5是掛在繩子上的衣服數量。從觀察時

4 

的衣服可見總數:所述第一布從0開始幷包括4個部分,從0。第二布開始於圖6和從6覆蓋3個部分等.. 樣本輸出前面是4.

+3

做好準備,以獲得最大的沒有。對今天的反對票。 提示:修改您的帖子以顯示您嘗試的內容。 – P0W

回答

0
  1. 我試過的邏輯是假設有2件衣服在同一個位置開始,寬度大於另一個;那麼這將覆蓋一塊布,因此該布將不可見。

  2. 如果假設有兩件衣服,一件是位置1,另一件是位置2,但是如果位置1處的布料寬度大於位置2處布料的寬度,那麼在這種情況下布料將不再是布料可見。

因此,我們將循環運行n次,其中n =衣服數量,每次看到這種情況時,可見衣服的數量= n-1。

但是這裏的問題是程序的用戶輸入應該按照每個位置以遞增的方式發生。那是在2個位置之後,我可以給3或4個位置的輸入,而不是第5個位置,然後是第3個位置。

其次,我想保留一個變量作爲類變量= numberofclothes,每當我遇到上述條件時就會減少 但是我沒有足夠的測試數據來檢查這個。


package main; 

import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.concurrent.SynchronousQueue; 

import javax.swing.plaf.synth.SynthScrollBarUI; 

public class Ropecalculation { 

    static int numberofvisibleclothes; 
    static int ropelenth; 
    static int numberofclother; 
    static int clothwidth; 
    static int startposition; 
    static int[] startpoint; 
    static int[] width; 
    public static void main(String args[]){ 

     Scanner scan=new Scanner(System.in); 
     System.out.println("Enter the rope length"); 
     ropelenth=scan.nextInt(); 
     System.out.println("Enter the number of clothes"); 
     numberofclother=scan.nextInt(); 
     for(int i=0;i<numberofclother;i++){ 
      startpoint=new int[numberofclother]; 
      width=new int[numberofclother]; 
      System.out.println("Enter start position"); 
      startposition=scan.nextInt(); 
      startpoint[i]=startposition; 
      System.out.println("Enter width"); 
      clothwidth=scan.nextInt(); 
      width[i]=clothwidth; 
      //System.out.println(startpoint.length); 
     } 
     Ropecalculation rp=new Ropecalculation(); 
     rp.checkvisibleclothes(startpoint,width); 
    } 
    public void checkvisibleclothes(int[] startpoint, int[] width) { 

     for(int j=0;j<startpoint.length-1;j++){ 
      int x=startpoint[j]; 
      int c=startpoint[j+1]; 
      if(x==c){ 
       int wide=width[j]; 
       int wideagain=width[j+1]; 
       if(wide<=wideagain){ 
        numberofvisibleclothes=numberofclother-1; 
       } 
      } 
      else if(c==x+1){ 
       int wide1=width[j]; 
       int wideagain1=width[j+1]; 
       if(wide1>wideagain1){ 
        numberofvisibleclothes=numberofclother-1; 
       } 
      } 
     } 
     System.out.println(numberofvisibleclothes); 
    } 
} 
+0

如果這不是一個答案重新格式化你原來的帖子(問題),並將其添加到那裏。 – P0W

0
public class DryingClothes { 

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    //System.out.println("Enter rope length"); 
    //int ropeLength = scan.nextInt(); 
    System.out.println("Enter number of clothes"); 
    int clothesCount = scan.nextInt(); 
    int[][] dimensions = new int[clothesCount][2]; 
    Map<Integer, Integer> visibility = new HashMap<>(); 
    for(int i=0;i<clothesCount;i++) { 
     dimensions[i][0] = scan.nextInt(); 
     dimensions[i][1] = scan.nextInt(); 
     for(int j=dimensions[i][0];j<dimensions[i][0]+dimensions[i][1];j++) { 
      visibility.put(j, i); 
     } 
    } 
    Set<Integer> clothesRemaining = new HashSet<>(); 
    for(int key : visibility.keySet()) { 
     clothesRemaining.add(visibility.get(key)); 
    } 
    System.out.println(clothesRemaining.size()); 
    scan.close(); 
    } 
}