मैं लंबाई के योग जिससेयोग करने के लिए
syra(1) = 1
syra(2) = n + syra(n/2) if n%2==0
syra(3) = n + (n*3) + 1
जैसे गणना करने के लिए एक कोड लिखा है एक कारगर तरीका बनाएँ।
- syra (1) उत्पन्न होगा 1
- syra (2) उत्पन्न 2 1
- syra (3) उत्पन्न होगा 3 10 5 16 8 4 2 1
- लंबाई (3) होगा सभी syra (1), syra (2), syra का योग (3) जो है 11.
कोड यह रहा:
public static int lengths(int n) throws IllegalArgumentException{
int syra = n;
int count = 0;
int sum = 0;
if (syra < 1){
throw new IllegalArgumentException("Value must be greater than 0");
}else{
for (int i=1; i<=syra; i++){
count = i;
sum++;
while (count > 1){
if ((count % 2) == 0){
count = count/2;
sum++;
}else{
count = (count * 3) + 1;
sum++;
}
}
}
}
return sum;
}
प्रश्न यह है कि, यदि मैं बड़े मूल्य के साथ लंबाई को विस्फोट करता हूं जैसे कि 700000, इसमें बहुत लंबा समय लगेगा और उन सिरा (10), सिरा (5) के लिए दोहराना कदम होगा ... जो पहले ही सिरा (3) में दिखाई देता है।
मैं ओवरलैप अनुक्रमों के कुछ अस्थायी (सरणी) को स्टोर करने के लिए कोड को कैसे ठीक कर सकता हूं?
ठीक है, जानकारी के अनुसार, यहां सरणी के साथ मेरा एक और संशोधित कोड है, यह बाध्य त्रुटि से सरणी अनुक्रमणिका क्यों उत्पन्न करता है?
public class SyraLengths{
public static void main (String[]args){
lengths(3);
}
public static int lengths(int n) throws IllegalArgumentException{
int syra = n;
int count = 0;
int sum = 0;
int [] array = new int [syra+1];
array[0] = 0;
if (syra < 1){
throw new IllegalArgumentException("Value must be greater than 0");
}else{
for (int i=1; i<=syra; i++){
count = i;
sum++;
while (count > 1){
if(array[count] !=0){sum = sum + array[count];}
else if ((count % 2) == 0){
count = count/2;
array[count]=sum;
sum++;
}else{
count = (count * 3) + 1;
array[count]=sum;
sum++;
}
}
}
}return sum;
}
}
'syra (2) = n + syra (n/2) 'में' n' क्या है? –
@ हेमल - कोड पढ़ें। –
धन्यवाद, @ एडी। गणितज्ञ नहीं होने के नाते मुझे नहीं पता था कि सिरा समारोह क्या था और सोचा था कि मैं spec के खिलाफ कोड की जांच करूंगा। –