Вот программа, которую я сделал и которая, как мне кажется, отвечает на вопрос, который вы задаете.Вы просто хотите пройтись по всем значениям числа x и проверить, является ли вычисленный y также целым числом.Я также отслеживаю общее количество найденных решений и решение с наибольшим расстоянием между x и y и даю окончательный ответ в соответствии с ними.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void count_solns(double);
int main(int argc, char *argv[])
{
if (argc == 2 && argv[1]) {
int k = atoi(argv[1]);
count_solns(k);
}
else {
puts("Usage: count_solns <positive_integer>");
return 1;
}
return 0;
}
void count_solns(double k)
{
printf("Print positive integer solutions to 3x + 5y = %.3f\n", k);
int solns_found = 0;
int distance = -1;
int final_x, final_y;
double x, y;
for (x = 0; x <= (k/3); x++) {
y = (k-3*x)/5;
if (y == floor(y)) {
printf("Solution found at (x, y) == (%d, %d)\n", (int) x, (int) y);
solns_found++;
if (fabs(x-y) > distance) {
final_x = x;
final_y = y;
}
}
}
if (solns_found == 0)
printf("No whole number solutions found for 3x + 5y = %.3f", k);
else if (solns_found == 1)
puts("This is the only solution where x and y are both whole numbers");
else
printf("The whole number solution with the highest distance between x and y is (x, y) == (%d, %d)", final_x, final_y);
return;
}
Использование выглядит следующим образом:
$ ./count_solns 70
Print positive integer solutions to 3x + 5y = 70.000
Solution found at (x, y) == (0, 14)
Solution found at (x, y) == (5, 11)
Solution found at (x, y) == (10, 8)
Solution found at (x, y) == (15, 5)
Solution found at (x, y) == (20, 2)
The solution with the highest distance between x and y is (x, y) == (20, 2)