十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
看代码,除了主函数语句 printf("("%d是一个完数\n",a[i]); 中a[i]出界外,没有什么问题。
阳东ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!
如果去年这一句后仍然还有问题,可以考虑是不是有在汉字输入状态下输入命令或标点的情况。
提供两个办法:
1.在主调函数中建立数组,将数组指针传给自定义的函数,处理后主调函数中的数组值也就变化了。
void fun(int a[],int n){
........
}//其中a[]就是要输入的数组,n是这个数组的长度。
void main(void){
int arry[10]={1,2,3,4,5,6,7,8,9,0};
fun(arry,10);
......
}
2.可以在主调函数中建立数组并把首地址和长度传给函数,在函数中创建一个动态数组,处理完后把动态数组的首地址返回主调函数,最后在主调函数中释放动态申请的内存。
int *fun(int a[],int n){
int *p=(int *)malloc(n*sizeof(int));//申请内存.
if(!p){//判断是否申请成功.
printf("failure...");
exit(0);
}
memcpy(p,a,n*sizeof(int));//把主调函数的数组拷贝过来.
......
return p;
}
void main(void){
int arry[10]={1,2,3,4,5,6,7,8,9,0},*ptmp;
ptmp=fun(arry,10);
......
free(ptmp);//释放申请的空间.
}
数组的内容是不能一一传给函数的……
#include stdio.h
int main()
{
int k, n, n1, n2;
scanf("%d%d", n1, n2);
for(n=n1; n=n2; n++)
{
int s[10] = {0};
for(k=2; k=n/2; k++) // 判断素数
if(n%k==0)
break;
if(k=n/2) // n不是素数
continue;
k = n * n;
while(k0) // 统计 n*n 的各数字个数
{
s[k%10]++;
k /= 10;
}
for(k=0; k10; k++) // 检查各数字的个数
if(s[k]1)
break;
if(k10) // 有数字相同
continue;
printf("%d %d\n", n, n*n);
}
}
N个元素中取出M个元素的所有排列
#include stdio.h
#define MAX 10
int used[MAX];
int result[MAX];
int M, N;
void print() {
int i;
for(i = 0; i M; i++)
printf("%d ", result[i]);
printf("\n");
}
void Perm(int step) {
int i;
if (step == M)
print();
else
for(i = 0; i N; i++)
if (!used[i]) {
used[i] = 1;
result[step] = i + 1;
Perm(step + 1);
used[i] = 0;
}
}
main() {
scanf("%d %d", M, N);
Perm(0);
}
N个元素中取出M个元素的所有组合
#includestdio.h
#define MAX 20
int c[MAX] = {0};
int M, N;
void print() {
int i;
for(i = 0; i M; i++)
printf("%d", c[i + 1]);
printf("\n");
}
void Comp(int m) {
if (m == M + 1)
print();
else
for(c[m] = c[m - 1] + 1; c[m] = N - M + m; c[m]++)
Comp(m + 1);
}
void main() {
scanf("%d %d", M, N);
Comp(1);
}