English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يشرح هذا المقال مثالاً على مشكلة خوارزمية Go لتحليل تقسيم الأعداد الصحيحة. يُشارك معكم لتكونوا مرجعًا، وتفاصيلها كالتالي:
يمكن دائمًا تقسيم عدد صحيح إلى مجموع قوى 2، على سبيل المثال:
7 = 1 + 2 + 4
7 = 1 + 2 + 2 + 2
7 = 1 + 1 + 1 + 4
7 = 1 + 1 + 1 + 2 + 2
7 = 1 + 1 + 1 + 1 + 1 + 2
7 = 1 + 1 + 1 + 1 + 1 + 1 + 1
يوجد 6 طريقة تقسيم مختلفة.
على سبيل المثال: يمكن تقسيم 4 إلى: 4 = 4،4 = 1 + 1 + 1 + 1،4 = 2 + 2،4=1+1+2.
يُعرف f(n) بعدد الطرق المختلفة لتقسيم n، على سبيل المثال f(7) = 6.
يتطلب كتابة برنامج لقراءة n (لا يتجاوز 1000000) وإرجاع f(n)
المدخل: عدد صحيح N (1 <= N <= 1000000).
الإخراج: f(n)
إذا كان البيانات المدخلة تتجاوز النطاق، يتم إرجاع -1.
المدخل النموذجي:
7
الناتج النموذجي:
6
التحقيق في الكود:
package huawei import ( "fmt" ) func Test08Base() { input := 1000000 output := numberSplit(input) fmt.Println(output) } func numberSplit(n int) int { إذا كان n < 1 أو n > 1000000 { عدد البيانات[-1] = -1 } //1=1،1 طريقة تقسيم إذا كان n == 1 { عدد البيانات[1] = 1 } //2=2,2=1+1،2 طرق تقسيم إذا كان n == 2 { عدد البيانات[2] = 2 } //n>=3 //حفظ القيم التي تم حسابها مسبقًا بيانات := make([]int, n+1) بيانات[0] = 0 // القيمة غير مهمة وهي مجرد مكانة بيانات[1] = 1 بيانات[2] = 2 للفترة من i := 3 إلى n; i++ { إذا كان i%2 == 0 { //رقم زوجي بيانات[i] = بيانات[i-2] + بيانات[i/2] } else { //رقم فردي بيانات[i] = بيانات[i-1] } } عدد البيانات[n] }
آمل أن يساعدك ما ذكرته في هذا المقال في تصميم برامج Go لغتك.
البيان: محتوى هذا المقال تم جمعه من الإنترنت، ويحق لصاحب الحقوق الأصلية أن يكون له حقوق الملكية، ويتم جمع المحتوى من إسهامات المستخدمين عبر الإنترنت، ولا يمتلك هذا الموقع حقوق الملكية، ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية ذات صلة. إذا اكتشفت محتوى مخالف للحقوق، فأنت مرحب بك في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # ب @) لإبلاغنا، وقدم الدليل على ذلك، إذا تم التحقق من ذلك، فإن هذا الموقع سيقوم بإزالة المحتوى المزعوم بشكل فوري.