- •1. Введение
- •2.1.3. Описание логической структуры
- •2.2.4. Руководство пользователя
- •2.2.5. Руководство программиста
- •3.2.3. Руководство оператора
- •3.2.4. Руководство пользователя
- •3.2.5. Руководство программиста
- •4.2.4. Руководство пользователя
- •4.2.5. Руководство программиста
- •5.2.4. Руководство пользователя
- •5.2.5. Руководство программиста
- •6. Заключение
- •7. Приложение к задаче №1
- •8. Приложение к задаче №2
- •9. Приложение к задаче №3
- •10. Приложение к задаче №4
5.2.4. Руководство пользователя
Программа предназначена для нахождения совершенных чисел в предела меньше M
int i,j - параметры циклов. i - число приближающееся к M.
int m - входное значение.
int x - максимальное теоретическое количество делителей.
int k - сумма делителей.
Данные вводятся с клавиатуры.
Входные:
1000
Выходные:
6 28 496
5.2.5. Руководство программиста
Программа предназначена для нахождения совершенных чисел в предела меньше M.
main() - функция принимает начальные значения в виде M до которого проводятся поиски.
int i,j - параметры циклов. i - число приближающееся к M.
int m - входное значение.
int x - максимальное теоретическое количество делителей.
int k - сумма делителей.
Запуск программы в Windows, а именно файл 1-23.c можно выполнить при помощи:
- Среда разработки Dev-C++ 5.8.2 или выше.(компилятор TDM-GCC 4.8.1). Рекомендуемо проводить компиляцию и запуск именно из этой среды.
- Так же поддерживаются среды Вorland С++ 3.1, Borland C++ 5.5.
6. Заключение
Результаты курсовой работы демонстрируют возможности языка Си в решении олимпиадных задач в технологии операторного программирования.
Реализация алгоритмов решения на данном языке с применением некоторых математических знаний приводит к получению эффективной программы, использование которой возможно для более сложных задач.
7. Приложение к задаче №1
// Данная программа предназначена для нахождения наибольшей стоимости книги,
// при которой могло призойти то, что у продавца не найдется сдачи при приобретении покупателем книги, если у покупателя было M монет достоинтсвом
// P[1],...,P[M], а у продавца было N монет достоинством Q[1],...,Q[N],
// причем P[1]<=P[2]<=...<=P[M] и Q[1]<=Q[2]<=...<=Q[N].
#include<stdio.h>
#include<math.h>
#define M 5
#define N 6
int main(){
int P[M]={3,13,74,273,432};
int Q[N]={1,2,3,7,10,10};
int Psumm=0, i,j,k, CostBook, BackCost=0,Summ, CostP, BackCostNext;
printf(“\nEnter P[M]:\n”);
for(i=0;i<M;i++){
scanf("%d",&P[i]);
}
printf(“\nEnter Q[N]:\n”);
for(i=0;i<N;i++){
scanf("%d",&Q[i]);
}
for(i=0;i<M;i++){ //вычисление контрольной суммы массива покупателя
Psumm+=P[i];
}
for(CostBook=1;CostBook<=Psumm;CostBook++){ //цикл в котором находится удовлетворяющий условию элемент
CostP=Psumm;
for(i=0;i<pow(2,M);i++){ //через двоичное представление
k=i;
Summ=0;
for(j=0;j<M;j++){
Summ+=P[j]*((k>>j)%2);
}
if(CostBook<=Summ && CostP>Summ){
CostP=Summ;
}
}
CostP=CostP-CostBook;
if(CostP!=0){
BackCostNext=CostBook;
for(i=0;i<pow(2,N);i++){ //через двоичное представление
k=i;
Summ=0;
for(j=0;j<N;j++){
Summ+=Q[j]*((k>>j)%2);
}
if(CostP==Summ){
//есть сдача - продолжение цикла бессмысленно
BackCostNext=0;
break;
}
}
}
if(BackCostNext>0 && BackCostNext>BackCost){
BackCost=BackCostNext;
}
}
if(BackCost>0){
printf("Cost Book=%d, BackCost no ", BackCost);
}
else{
printf("BackCost yes ", BackCost);
}
return 0;
}
