Να δώσω τότε και μια συναρτησιακή εκδοχή του απλού αλγόριθμου.
#include <fmt/format.h>
#include <range/v3/all.hpp>
namespace rs = ranges;
int main() {
fmt::print("The answer is {:n}",
rs::accumulate(rs::iota_view(1uL, 101uL) |
rs::view::filter([](auto v) {return (v % 3 == 0) or (v % 5 == 0); }),0));
return 0;
}
Σε C++17, μαζί με δυο βιβλιοθήκες, που θα είναι μέσα στην επόμενη C++20, αλλά μπορούν να χρησιμοποιηθούν από σήμερα. Δεν έχει την κομψότητα και την απλότητα της Python, αλλά την πλησιάζει υπερβολικά πολύ
Mία όχι και τόσο efficient εκδοχή, αλλά με έμφαση στο readability και το maintainability, γραμμένη σε Go:
package main
import "fmt"
// isItDivisibleByBoth() evaluates true or false
// whether num1 is divisible by both num2 and num3
func isItDivisibleByBoth(num1, num2, num3 int) bool {
multiples := num2 * num3
if num1%multiples == 0 {
return true
}
return false
}
// findNumbersDivisibleBy() returns an array of integers
// including numbers disible by "a" and "b"
// beginning from the "start" and finishing at the "end"
func findNumbersDivisibleBy(start, end, a, b int) []int {
numbers := []int{}
for i := start; i <= end; i++ {
if isItDivisibleByBoth(i, a, b) {
numbers = append(numbers, i)
}
}
return numbers
}
// sum() calculates the sum of an integer array
func sum(input []int) int {
sum := 0
for i := range input {
sum += input[i]
}
return sum
}
func main() {
// example:
// In a list of numbers from 23 to 100, find numbers divisible by 3 and 5
numbers := findNumbersDivisibleBy(23, 100, 3, 5)
fmt.Println(numbers)
// Calculate the summary of these numbers
sumNumbers := sum(numbers)
fmt.Println(sumNumbers)
}
Ξέρω ότι άργησα 10 μέρες να το ανεβάσω. Δεν είμαι ο καλύτερος στον προγραμματισμό, αλλά εδώ έχω τη λύση του προβλήματος σε C (όσο το δυνατόν απλούστερη, σε λιγότερες από 20 γραμμές). Και καλώς ή κακώς, ίσως να πήρα κάποιες ιδέες, για να διορθώσω κάποιες λεπτομέρειες, από προηγούμενα posts εδώ. Κανείς δεν είναι τέλειος…
#include <stdio.h>
void main()
{
int num = 0, input = 0, div1 = 3, div2 = 5, i = 0;
printf("\nType a number: ");
scanf("%d", &input);
for (num = 0; num <= input; num++) {
if ((num % div1 == 0) && (num % div2 == 0)) {
i = i + num;
}
}
printf("\n%d", i);
printf("\n");
}
#proklisi1.nim
import strutils
proc souma(n: int): int =
var s=0
var i=3
while true:
if i > n: return s
if i mod 3 == 0 or i mod 5== 0: s = s + i
inc i
echo "Δώσε αριθμό:"
let n = readLine(stdin).parseInt()
echo souma n
def sum_of_nums():
list_3=[]
list_5=[]
number = 1
while number==1:
x=input('Number: ').strip()
if not x.isdigit(): continue
else:
# Εισαγουμε σε 2 λίστες τους αριθμούς που διαιρούντε με το 3 και με το 5
x = int(x)
list_3 = [n for n in range(1, x + 1) if n % 3==0]
list_5 = [n for n in range(1, x + 1) if n % 5==0]
break
# βρίσκουμε το αθροισμα της κάθε λίστας
s3 = 0
for i in list_3: s3+=i
s5 = 0
for i in list_5: s5 += i
print('Άθροισμα αριθμών που διαιρούνται με το 3: {}'.format(s3))
print('Άθροισμα αριθμών που διαιρούνται με το 5: {}'.format(s5))
if __name__=='__main__':sum_of_nums()