目前程序跑不起来 但不知道原因 输入的n小于等于2^64-1
#include <stdio.h>
int search(int b[],int len,int target)
{
for(int i=0;i<len;i++)
if(b[i]==target)
return 1;
return 0;
}
int main()
{
unsigned long long n;
int i,j,M,N,k=0,q;
scanf("%d",&N);
scanf("%d",&M);
int a[N][N],b[N*N];
//建立N*N的杨辉三角
for(i = 0; i < N; i++)
{
a[i][i] = 1;
a[i][0] = 1;
}
for(i = 2; i < N; i++)
{
for(j = 1; j <= i - 1; j++)
{
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
for(i = 0; i < N; i++)
{
for(j = 0; j <=i; j++)
{
b[k]=a[i][j];//把二维数组转存为一维数组
k++;
}
}
for (q=1;q<=M;q++)
{
scanf("%llu",&n);
if (search(b,N,n)==1)//调用search函数查找
printf("yes\n");
if (search(b,N,n)==0)
printf("no\n");
}
return 0;
}
这题问你输入的值是否在杨辉三角里,并不是让你画杨辉三角
所以你没有必要真的建立一个二维数组
你只需要2行,反复迭代就行了
而且你只需要生成一半,另一半是对称的
你每生成一个数,就去跟输入的数比较,不用另外写个search函数去遍历
如果生成的数已经大于输入的数,说明输入的数不在里面