2017-10-16 62 views
-4

薩欽很喜歡甜食。所以,他去了一個糖果市場。有一排甜蜜的攤位。每個甜美的攤位都有不同的甜食。爲了節省一些時間,他決定從連續的攤位買甜食。所以,他可以從儘可能多的攤位買到他想要的攤位,但所有這些攤位都必須是連續的。他還決定從每個攤位只購買1公斤甜食。給出每個攤位1kg糖果的成本。該市場有一個奇怪的計費規則。這條規則如下 - 所有糖果的總成本是所有糖果的總成本乘以他在最後購買的甜點成本。例如如果他以相同的順序購買成本爲2,3,4的糖果,則糖果的總成本將是24 + 34 + 4 * 4 = 36。現在他想知道購買甜食的所有可能方式的總成本是多少。你能幫助他嗎?因爲這個數字可能很大,所以你應該用10^9 + 7取模的最終結果。購買甜蜜拼圖?

輸入規格你的函數包含一個參數 - 大小爲N的一維整數數組,其中第i個元素表示來自第i個攤位的1kg糖果的成本。第一行輸入包含表示Array大小的Integer N.各自含有從1單個整數輸入的(1<=N<=10^5)下一頁N行至9

輸出規格必須返回的購買的所有可能的方式甜食模10^9+7成本的整型總和。

實施例樣品測試案例1-輸入3

輸出53

說明購買糖果的可能途徑是 -

a)第1

b)1 2

C)2

d)1 2 3

E)2 3

F)中每一種的3

成本是以下各項

一)1 * 1 = 1

b)1 * 2 + 2 * 2 = 6

c)中的2×2 = 4

d)1 * 3 + 2 * 3 + 3 * 3 = 18

E)2 * 3 + 3 * 3 = 15

F)3 * 3 = 9

因此總成本將1 + 6 + 4 + 18 + 15 + 9 = 53

我的代碼:

package abc; 

import java.util.*; 
class A 
{ 
public static int possibleways(int[] input1) 
{ 
    int x,y,z; 
    long lastelement,total=0; 
    for(x=0;x<input1.length;x++) 
    { 
     for(y=x;y>=0;y--) 
     { 
      do{lastelement=input1[x]; 
      }while(false); 
      for(z=0;z<=y;z++) 
      { 
       total=total+input1[x-z]*lastelement; 
      } 
     } 
    } 
    return (int) (total%(Math.pow(10, 9)+7)); 
    //Write your code here 
} 

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    int output = 0; 
    int ip1_size = 0; 
    ip1_size = Integer.parseInt(in.nextLine().trim()); 
    int[] ip1 = new int[ip1_size]; 
    int ip1_item; 
    for(int ip1_i = 0; ip1_i < ip1_size; ip1_i++) { 
     ip1_item = Integer.parseInt(in.nextLine().trim()); 
     ip1[ip1_i] = ip1_item; 
    } 
    output = possibleways(ip1); 
    System.out.println(String.valueOf(output)); 
} 
} 

在上面的代碼我得到3測試用例失敗,剩下的7測試用例通過。這個問題是一個Techgig編程問題。
我想知道我缺少上述代碼的位置。

+0

哪個單元測試失敗了嗎? –

+0

測試用例不是隻給出失敗的條件用標記 – user57370

+0

顯示您是否嘗試過所有示例輸入?他們全都通過了嗎? – Ren

回答

0

試試這個代碼

import java.io.*; 
import java.math.*; 
import java.util.*; 

class Q 
{ 
public static void main(String arg[]) 
{ 
Scanner sc=new Scanner(System.in); 
int n=sc.nextInt(); long a[]=new long[n]; 
for(int i=0;i<n;i++) 
a[i]=sc.nextLong(); 
int x=fun(a); 
System.out.println(x); 
} 

public static int fun(long a[]) 
{ 
long sum=0; 
for(int i=0;i<a.length;i++) 
sum+=a[i]; 
BigInteger ans=BigInteger.valueOf(0); 
    for(int i=0;i<a.length;i++) 
    { 
    long temp=a[i]*sum*(i+1); 
    ans=ans.add(BigInteger.valueOf(temp)); 
    sum-=a[i]; 
    } 
ans=ans.remainder(BigInteger.valueOf(1000000007)); 
return Integer.parseInt(ans+""); 
} 
}