Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2014, 21:19   #11
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Вот что у меня получилось,конечно с перебором чисел в двух функция-беда,я просто подогнала цикл под массив,не знаю,как сделать так,чтобы оно нормально перебирало и сравнивало каждое число в массиве
Код:
#include "stdafx.h"
#include <stdio.h>
#include "locale"
int CreateArray1(int *);
int first[6]={50};//обовязковий постріл для першого спортсмена
int second[6];
int third[6];
void SortArray(int *,int);
int CreateArray2(int *r,int);
void PrintArray(int mas[],int n,char *);
int main(void)
{
    setlocale(LC_ALL,"Ukrainian");
    int i,j,k;
    int rest[14]={20,10,10,5,3,2,1,1}; //постріли у верхній частині, 4 залишкові будуть отримані з bottom
    int bottom[9]={25,25,20,20,10,5,3,2,1};//постріли у нижній частині-відбираємо 5, залишкові 4 підуть в rest
 
    CreateArray1(bottom); //постріли першого стрільця
        SortArray(first,6);
               printf("Спортсмен|          Мiшень                   |");
               printf("\n=====================================================\n");
        PrintArray(first,6,"Перший");
    for(i=0;i<9;i++)
        for(j=0;j<=8;j++) 
    if(first[i]==bottom[j]) //залишкові елементи масиву bottom
            {
                bottom[j]=0;
                break;
            }
 
    for(i=0,j=8;i<9;i++)
        if(bottom[i])
        {   rest[j++]=bottom[i];
            
    }
 
    SortArray(rest,14);
    printf("\n");
    CreateArray2(rest,14);
    SortArray(second,6);
    
    PrintArray(second,6,"Другий");
 
 
    for(i=0;i<6;i++)//добираємо залишкові в rest постріли в third
        for(j=0;j<12;j++)
            if(second[i]==rest[j])
            {
                rest[j]=0;
                break;
            }
 
            for(i=0,j=-1;i<13;i++)
        if(rest[i])
            third[++j]=rest[i];
    printf("\n");
        
            PrintArray(third,6,"Третiй");
            printf("\n\n");
 
void PrintArray(int mas[],int n, char*p)
{
    int k;
    printf("%s ",p);
    for(k=5;k>=0;k--)
    
    printf("\t|  %-2i  ",mas[k]);
 
}
int CreateArray2(int *r,int n)
{
    int i,j,sum=0,sum2,k,l,m;
        for(j=3,l=0;j<=5;j++)
        {
            sum+=r[j];
            second[l++]=r[j];
        }
        sum2=sum;
        for(i=12;i>=10;i--)  
        {
            sum2+=r[i];
 
            second[l++]=r[i];
        }
 
return 0;
}
int CreateArray1(int *r)
{
    
    int ost[30];
    int i=0,j,k,sum=50,n;
    for(i=0;i<9;i++)
    {   for(j=8;j>=4;j--) //4-тому що перший єлемент-50,другий позначається [i],залишаэться 4
        {   
 
            sum+=r[i]+r[j];
            if(sum==71)
            {
                for(k=0;k<=6;)  
                {   
                    k++;
                    first[k]=r[j++];
                }
 
            }   
            
        }
    
        sum=0;//онулюємо,щоб не додавалось до попередньї суми
    }
 
    return 0;
}
 
void SortArray(int *arr,int u)
 
{
    int i,j,c,k;
        for ( i = 1; i < u; i++ )
        {
            for ( j = u-1; j >= i; j--)
                 if ( arr[j-1] > arr[j])
                    {
                         c = arr[j-1];
                         arr[j-1] = arr[j];
                         arr[j] = c;                    
                    }
        }           
}
Вероника99 вне форума Ответить с цитированием
Старый 25.01.2014, 04:17   #12
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Окончательный код,если кому-то интересно)
Код:
#include "stdafx.h"
#include <stdio.h>
#include "locale"
#define n 5
#define h 6
#define ans 71
#define size 9
#define size2 11
int CreateArray1(int ,int,int);
int first[5];//обовязковий постріл для першого спортсмена
int second[6];
int third[6];
void SortArray(int *,int);
int CreateArray2(int ,int,int);
void PrintArray(int mas[],char *);
int b[size];
int bottom[9]={25,25,20,20,10,5,3,2,1};//постріли у нижній частині-відбираємо 5, залишкові 4 підуть в rest
int rest[11]={20,10,10,5,3,2,1,1}; //постріли у верхній частині, 4 залишкові будуть отримані з bottom

int main(void)
{
	setlocale(LC_ALL,"Ukrainian");
	int i,j;
	
	CreateArray1(0,0,0); //постріли першого стрільця
	first[5]=50;
		SortArray(first,6);

		
			   printf("Спортсмен|		   Мiшень                   ");
			   printf("\n============================================================\n");
		
		PrintArray(first,"Перший");
		printf("\n");

	for(i=0;i<6;i++)
 		for(j=0;j<9;j++) 
		if(first[i]==bottom[j]) //залишкові елементи масиву bottom
			{
			
				bottom[j]=0;
				break;
			}
		
	for(i=0,j=7;i<9;i++)
		if(bottom[i])
		{
			rest[j]=bottom[i];
		
			++j;		
		}	

	CreateArray2(0,0,0);
	SortArray(second,6);
		
	
	
	PrintArray(second,"Другий");


	for(i=0;i<6;i++)//добираємо залишкові в rest постріли в third
		for(j=0;j<11;j++)
			if(second[i]==rest[j])
			{	
				rest[j]=0;		
				break;
			}

			for(i=0,j=0;i<11,j<h;i++)
		if(rest[i])
		{	
			third[j]=rest[i];
			j++;
		
		}
			
	printf("\n");
SortArray(third,6);
	
			PrintArray(third,"Третiй");
			printf("\n\n");
}
void PrintArray(int mas[], char *p)
{
	int k;
	printf("%s ",p);
	for(k=5;k>=0;k--)
	printf("  |  %-2i  ",mas[k]);

}

int CreateArray2(int sum, int k, int pos)
{
	int flag,j;
	if (h == k)	
	{
		if (sum == ans)
		{	
		
				for (int i = 0; i <=h-1; i++)
			{
				second[i]= rest[b[i]];	
				
				}
		}	
		return 0;
	}
	

	for(int i = pos; i <size2; i++)
	{	
		b[k] = i;
		CreateArray2(sum+rest[b[k]], k+1, i+1);
			
	}

}
int CreateArray1(int sum, int k, int pos)
{

	int flag,j;
	if (n == k)	
	{
		if (sum+50 == ans)
		{	
			
				for (int i = 0; i <=n-1; i++)
			{
				
				first[i]= bottom[b[i]];
			
				
				}

		}	
		return 0;
	}
	

	for(int i = pos; i < size; i++)
	{	
		b[k] = i;
		CreateArray1(sum+bottom[b[k]], k+1, i+1);
			
	}
}

void SortArray(int *arr,int u)

{
    int i,j,c;
        for ( i = 1; i < u; i++ )
		{
            for ( j = u-1; j >= i; j--)
                 if ( arr[j-1] > arr[j])
                    {
                         c = arr[j-1];
                         arr[j-1] = arr[j];
                         arr[j] = c;                    
                    }
		}           
}
Вероника99 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Результаты соревнований по прыжкам в длину представлены в виде матрицы 5х3 (5 спортсменов по 3 попытки ) inKognit Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 13.01.2011 16:39
[Perl] плагин для проверки количества процессов для Nagios st01en Perl 3 27.10.2010 14:37
Помогите разобраться с алгоритмом!!!! kreviuz Помощь студентам 2 22.10.2009 02:09
Помогите разобраться с алгоритмом программы Evgenii Помощь студентам 10 07.11.2008 16:07
Перенос слов по слогам (не могу разобраться с алгоритмом) Only Love Помощь студентам 1 21.05.2007 22:43