33,008
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#define MAX_ADD 127
#define NADD 8
__int64 EqAdd(int Eq, int AddArray[NADD], int ArrayNum)
{
int CompArray[NADD+1];
__int64 CurrEqNum[MAX_ADD+1];
__int64 CurrEqNumSave[MAX_ADD+1];
int CompIndex = 0;
int AddIndex = 0;
if (ArrayNum > NADD || Eq > MAX_ADD)
{
return 0;
}
for (CompIndex = 0; CompIndex <= ArrayNum; CompIndex++)
{
CompArray[CompIndex] = 0;
}
for (AddIndex = 0; AddIndex <= Eq; AddIndex++)
{
CurrEqNum[AddIndex] = 0;
}
CurrEqNum[0] = 1;
for (CompIndex = 0; CompIndex < ArrayNum; CompIndex++)
{
for (AddIndex = 0; AddIndex <= Eq; AddIndex++)
{
if (AddIndex == 113)
{
AddIndex = 113;
}
CurrEqNumSave[AddIndex] = CurrEqNum[AddIndex];
if (AddIndex > 0)
{
CurrEqNum[AddIndex] += CurrEqNum[AddIndex-1];
}
if (AddIndex - AddArray[CompIndex] > 0)
{
CurrEqNum[AddIndex] -= CurrEqNumSave[AddIndex - AddArray[CompIndex] -1];
}
}
}
return CurrEqNum[Eq];
}
void main()
{
int AddArray[NADD] = {50,40,30,50,50,50,50,50};//不允许取0
printf("\n总组数为%I64d\n", EqAdd(116, AddArray, 8));
}
总组数为49892973204
Press any key to continue
using System;
namespace ConsoleApplication5
{
class Program
{
static long[,] Counter;
static int[] upper;
static void Main(string[] args)
{
int Sum = 116;
upper = new int[] { 30, 40, 50, 50, 50, 50, 50, 50 };
Counter = new long[Sum + 1,upper.Length];
Console.WriteLine(Calculate(Sum, 0));
}
static long Calculate(int sum,int index)
{
if(sum == 0)
return 1;
if(index >= upper.Length)
return 0;
if(Counter[sum,index] > 0)
return Counter[sum, index];
for (int i = 0; i <= Math.Min(upper[index],sum); i++)
Counter[sum, index] += Calculate(sum - i, index + 1);
return Counter[sum, index];
}
}
}
#include <stdio.h>
#include <windows.h>
#include <time.h>
__int64 c=0;
__int64 d=0;
void subfun(LPVOID sc){
int a[8]={0};
int b[8]={0};
int u[8]={50,50,50,50,50,30,40,50};
int x,y;
for(a[0]=1;a[0]<=50;a[0]=a[0]+2){//a1
printf(" sub thrd [%d/50]\n",a[0]);
b[0]=a[0];
for(a[1]=0;a[1]<=50;a[1]++){//a4
printf(" sub thrd [%d/50]\t[%d/50]\n",a[0],a[1]);
b[1]=b[0]+a[1];
if(b[1]>116) break;
for(a[2]=0;a[2]<=50;a[2]++){//a5
b[2]=b[1]+a[2];
if(b[2]>116) break;
for(a[3]=0;a[3]<=50;a[3]++){//a6
b[3]=b[2]+a[3];
if(b[3]>116) break;
for(a[4]=0;a[4]<=50;a[4]++){//a7
b[4]=b[3]+a[4];
if(b[4]>116) break;
if(b[4]<26) x=26-b[4];
else x=0;
for(a[5]=x;a[5]<=30;a[5]++){//a3
b[5]=b[4]+a[5];
if(b[5]>116) break;
if(b[5]<66) y=66-b[5];
else y=0;
for(a[6]=y;a[6]<=40;a[6]++){//a2
if(b[5]+a[6]>116) break;
//a[7]=116-b[6];//a8
d++;
}
}
}
}
}
}
}
}
int main(){
int a[8]={0};
int b[8]={0};
int u[8]={50,50,50,50,50,30,40,50};
char s[100];
HANDLE thrd;
int t1,t2;
int x,y;
t1=time(NULL);
thrd=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)subfun,NULL,0,NULL);
for(a[0]=0;a[0]<=50;a[0]=a[0]+2){//a1 0~50
printf("main thrd [%d/50]\n",a[0]);
b[0]=a[0];
for(a[1]=0;a[1]<=50;a[1]++){//a4 0~50
printf("main thrd [%d/50]\t[%d/50]\n",a[0],a[1]);
b[1]=b[0]+a[1];
if(b[1]>116) break;
for(a[2]=0;a[2]<=50;a[2]++){//a5
b[2]=b[1]+a[2];
if(b[2]>116) break;
for(a[3]=0;a[3]<=50;a[3]++){//a6
b[3]=b[2]+a[3];
if(b[3]>116) break;
for(a[4]=0;a[4]<=50;a[4]++){//a7
b[4]=b[3]+a[4];
if(b[4]>116) break;
if(b[4]<26) x=26-b[4];
else x=0;
for(a[5]=x;a[5]<=30;a[5]++){//a3
b[5]=b[4]+a[5];
if(b[5]>116) break;
if(b[5]<66) y=66-b[5];
else y=0;
for(a[6]=y;a[6]<=40;a[6]++){//a2
if(b[5]+a[6]>116) break;
//a[7]=116-b[6];//a8
c++;
}
}
}
}
}
}
}
WaitForSingleObject(thrd,INFINITE);
printf("c: \t%I64d\n",c);
printf("d: \t%I64d\n",d);
c=c+d;
t2=time(NULL);
printf("number: %I64d\n",c);
printf("use time: %d:%02d\n",(t2-t1)/60,(t2-t1)%60);
sprintf(s,"number:\n%I64d\n",c);
sprintf(s,"%suse time: %d:%02d\n",s,(t2-t1)/60,(t2-t1)%60);
MessageBox(NULL,s,"number",0);
return 0;
}
#include <stdio.h>
void fun1(){
int a[4]={0};
int x=0;
for(a[0]=0;a[0]<=50;a[0]++){
for(a[1]=0;a[1]<=50;a[1]++){
if(a[1]==a[0]) continue;
for(a[2]=0;a[2]<=50;a[2]++){
if(a[2]==a[0]||a[2]==a[1]) continue;
for(a[3]=0;a[3]<=50;a[3]++){
if(a[3]==a[0]||a[3]==a[1]||a[3]==a[2]) continue;
if(a[0]+a[1]+a[2]+a[3]==116) x++;
}
}
}
}
printf("x=%d\n",x);
printf("x%%4!=%d%%24=%d\n\n",x,x%24);
}
void fun2(){
int a[4]={0};
int y=0;
for(a[0]=0;a[0]<=50;a[0]++){
for(a[1]=a[0]+1;a[1]<=50;a[1]++){
for(a[2]=a[1]+1;a[2]<=50;a[2]++){
for(a[3]=a[2]+1;a[3]<=50;a[3]++){
if(a[0]+a[1]+a[2]+a[3]==116) y++;
}
}
}
}
printf("y=%d\n",y);
printf("y*4!=%d*24=%d\n",y,y*24);
}
int main(){
fun1();
fun2();
return 0;
}
x=70272
x%4!=70272%24=0
y=2928
y*4!=2928*24=70272
Press any key to continue
#include <stdio.h>
void fun1(){
int a[4]={0};
int x=0;
for(a[0]=0;a[0]<=50;a[0]++){
for(a[1]=0;a[1]<=50;a[1]++){
for(a[2]=0;a[2]<=50;a[2]++){
for(a[3]=0;a[3]<=50;a[3]++){
if(a[0]+a[1]+a[2]+a[3]==116) x++;
}
}
}
}
printf("x=%d\n",x);
printf("x%%4!=%d%%24=%d\n\n",x,x%24);
}
void fun2(){
int a[4]={0};
int y=0;
for(a[0]=0;a[0]<=50;a[0]++){
for(a[1]=a[0];a[1]<=50;a[1]++){
for(a[2]=a[1];a[2]<=50;a[2]++){
for(a[3]=a[2];a[3]<=50;a[3]++){
if(a[0]+a[1]+a[2]+a[3]==116) y++;
}
}
}
}
printf("y=%d\n",y);
printf("y*4!=%d*24=%d\n",y,y*24);
}
int main(){
fun1();
fun2();
return 0;
}
x=77435
x%4!=77435%24=11
y=3547
y*4!=3547*24=85128
Press any key to continue
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/////////////////////////////////////
#define N 8
int a[N]={50,40,30,50,50,50,50,50};
/////////////////////////////////////
void fun(int n){
int i,j,k;
__int64 *s;
s=(__int64*)malloc(sizeof(__int64)*(n+1)*N);
memset(s,0,sizeof(__int64)*(n+1)*N);
for(i=0;i<=a[0];i++) *(s+i*N)=1;
for(i=1;i<N-1;i++){
for(j=n;j>=0;j--){
for(k=0;k<=a[i];k++){
if(k>j) break;
*(s+N*j+i)=*(s+N*j+i)+*(s+N*(j-k)+i-1);
}
}
}
j=n;
for(k=0;k<=a[i];k++){
if(k>j) break;
*(s+N*j+i)=*(s+N*j+i)+*(s+N*(j-k)+i-1);
}
printf("number:\n%I64d\n",*(s+N*n+N-1));
free(s);
}
int main(void)
{
fun(116);
return 0;
}
number:
49892973204
Press any key to continue
#include <stdio.h>
#include <windows.h>
#include <time.h>
int c[2]={0};
int d[2]={0};
void subfun(LPVOID sc){
int a[8]={0};
int b[8]={0};
int i;
for(a[0]=0;a[0]<=50;a[0]=a[0]+2){//a1
printf(" sub thrd [%d/50]\n",a[0]);
b[0]=a[0];
for(a[1]=0;a[1]<=50;a[1]++){//a4
printf(" sub thrd [%d/50]\t[%d/50]\n",a[0],a[1]);
b[1]=b[0]+a[1];
if(b[1]>116) break;
for(a[2]=0;a[2]<=50;a[2]++){//a5
b[2]=b[1]+a[2];
if(b[2]>116) break;
for(a[3]=0;a[3]<=50;a[3]++){//a6
b[3]=b[2]+a[3];
if(b[3]>116) break;
for(a[4]=0;a[4]<=50;a[4]++){//a7
b[4]=b[3]+a[4];
if(b[4]>116) break;
for(a[5]=0;a[5]<=30;a[5]++){//a3
b[5]=b[4]+a[5];
if(b[5]>116) break;
if(b[5]<26) continue;
for(a[6]=0;a[6]<=40;a[6]++){//a2
b[6]=b[5]+a[6];
if(b[6]>116) break;
a[7]=116-b[6];//a8
if(a[7]>50) continue;
if(d[0]==999999999){
for(i=0;i<2;i++) if(d[i]!=999999999) break;
d[i]++;
for(i=i-1;i>=0;i--) d[i]=0;
}else d[0]++;
}
}
}
}
}
}
}
}
int main(){
int a[8]={0};
int b[8]={0};
char s[100];
int x;
int i;
HANDLE thrd;
int t1,t2;
t1=time(NULL);
thrd=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)subfun,NULL,0,NULL);
for(a[0]=1;a[0]<=50;a[0]=a[0]+2){//a1
printf("main thrd [%d/50]\n",a[0]);
b[0]=a[0];
for(a[1]=0;a[1]<=50;a[1]++){//a4
printf("main thrd [%d/50]\t[%d/50]\n",a[0],a[1]);
b[1]=b[0]+a[1];
if(b[1]>116) break;
for(a[2]=0;a[2]<=50;a[2]++){//a5
b[2]=b[1]+a[2];
if(b[2]>116) break;
for(a[3]=0;a[3]<=50;a[3]++){//a6
b[3]=b[2]+a[3];
if(b[3]>116) break;
for(a[4]=0;a[4]<=50;a[4]++){//a7
b[4]=b[3]+a[4];
if(b[4]>116) break;
for(a[5]=0;a[5]<=30;a[5]++){//a3
b[5]=b[4]+a[5];
if(b[5]>116) break;
if(b[5]<26) continue;
for(a[6]=0;a[6]<=40;a[6]++){//a2
b[6]=b[5]+a[6];
if(b[6]>116) break;
a[7]=116-b[6];//a8
if(a[7]>50) continue;
if(c[0]==999999999){
for(i=0;i<2;i++) if(c[i]!=999999999) break;
c[i]++;
for(i=i-1;i>=0;i--) c[i]=0;
}else c[0]++;
}
}
}
}
}
}
}
WaitForSingleObject(thrd,INFINITE);
printf("c: \t");
if(c[1]==0) printf("%d\n",c[0]);
else printf("%d%09d\n",c[1],c[0]);
printf("d: \t");
if(d[1]==0) printf("%d\n",d[0]);
else printf("%d%09d\n",d[1],d[0]);
x=c[0]+d[0];
if(x>999999999){
c[1]=c[1]+d[1]+x/1000000000;
c[0]=c[0]+d[0]+x%1000000000;
}else{
c[1]=c[1]+d[1];
c[0]=c[0]+d[0];
}
t2=time(NULL);
printf("number:\n");
if(c[1]==0) printf("%d\n",c[0]);
else printf("%d%09d\n",c[1],c[0]);
printf("use time: %d:%02d\n",(t2-t1)/60,(t2-t1)%60);
if(c[1]==0) sprintf(s,"number:\n%d\n",c[0]);
else sprintf(s,"%d%09d\n",c[1],c[0]);
sprintf(s,"%suse time: %d:%02d\n",s,(t2-t1)/60,(t2-t1)%60);
MessageBox(NULL,s,"number",0);
return 0;
}