yönerge:
Dosyasında main fonksiyonu içerisinde sabit bir dizi verilmiştir. Klavyeden bir hedef değer girişi yapılacak. Hedef değer verilen dizinin en küçük elemanından büyük, dizinin toplamından ise küçük olacak. Eğer değilse kullanıcıdan yeni bir değer girmesi istenecek. Yazılacak olan program size verilen dizinin elemanlarını kullanarak 2 tane çözüm dizisi oluşturacak. 1.Çözüm dizisi; Dizi içerisinden minimum sayıda eleman seçerek ve bu seçilen elemanların toplamı hedef değerden büyük olmamak koşulu ile elemanların toplamının hedef değere en yakın olacak biçimde bir çözüm dizisi oluşturulacak. Örneğin : Hedef değer 2020 girilmiş olsun. Toplamaları hedef değerden küçük ve aradaki fark en az olacak biçimde verilen diziden 1000-750-250 değerleri seçilebilir. Eğer bu sayılar dizi içerisinden seçilirse toplamları (2000) hedef değere en yakın olan değer seçilmiş olur. Minimum sayıda eleman seçerek (3 eleman) aradaki farkı minimum yapacak ( 2020 - 2000 = 20 ) değerler program tarafından seçilmiş olur.
benim yaptığım:
#include<stdio.h>
#include<stdint.h>
int topla(int degerler[]){
int i,sum=0;
for(i=0;i<10;i++){
sum+=degerler[i];
}
return sum;
}
int altsinir(int degerler[],int control){
int i,temp;
temp=control;
int sum=0;
for(i=9;i>=0;i--){
sum+=degerler[i];
control-=sum;
if(control<50){
printf("\nS1[0]:%d \nS2[1]:%d \nS3[2]:%d",degerler[i],degerler[i+1],degerler[i+2]);
break;
}
else{
continue;
}
}
printf("---------------");
printf("\n\nS1 Total Value:%d \nTarget Value:%d \nDifference:%d",control,temp,i);
}
int main()
{
int AvailableValues[10] = {50,100,150,250,400,500,600,750,850,1000};
int sum,target;
int i;
sum=topla(AvailableValues);
printf("Lutfen bir sayi giriniz: ");
scanf("%d",&target);
for(i=0;i<15;i++){
if(target>AvailableValues[0] && target<sum){
printf("\n");
break;
}
else{
printf("Tekrar Deneyin: ");
scanf("%d",&target);
}
}
printf("Sayiniz---> %d\n\n",target);
printf("First Solution List\n--------------------");
altsinir(AvailableValues,target);
return 0;
}Elde etmem gereken ekran örneği aşağıdadır:
