偶早期用的比较土的方法编程,方法是分枝定界法。
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <time.h>
#define FOR(j) for(i[j]=0;i[j]<=m[j];i[j]++) {
#define M(j) temp=0; for(k=0;k<j;k++) temp+=a[k]*i[k]; m[j]=(s-temp)/a[j];
void main()
{
int a[18] = {57, 71, 87, 97, 99, 101, 103, 113, 114, 115, 128, 129, 131, 137, 147, 156, 163, 186};
int i[18],temp=0,k,s;
double m[18];
unsigned long rt=0;
long t1,t2,secs_now;
struct tm *tm_now;
clrscr();
printf("Molecular weight of proteid:");
scanf("%d",&s);
time(&secs_now);
t1=secs_now;
m[0]=s/a[0];
printf("Wait");
FOR(0) M(1)
FOR(1) M(2)
FOR(2) M(3)
FOR(3) M(4)
FOR(4) M(5)
FOR(5) M(6)
FOR(6) M(7)
FOR(7) M(8)
FOR(8) M(9)
FOR(9) M(10)
FOR(10) M(11)
FOR(11) M(12)
FOR(12) M(13)
FOR(13) M(14)
FOR(14) M(15)
FOR(15) M(16)
FOR(16)
temp=0; for(k=0;k<17;k++) temp+=a[k]*i[k];
if((s-temp)%a[17]==0) {
i[17]=(s-temp)/a[17];
rt=rt+1;
}
}}} }}} }}} }}} }}} }}
printf("\nResults number:%ld.\n",rt);
time(&secs_now);
t2=secs_now;
printf("Run time:%ld seconds.\n",t2-t1);
getch();
} |