n发子弹打靶打中的平均环数超过或等于九环则通过,求n发子弹打中环数的所有组合错在哪里,还有代码不太明白

铁锈_ 2014-03-29 04:35:04
环数为0到10环
#include "stdio.h"

shoot(int n,int s)//求第X发子弹环数所有可能性
{
int i,a[100],j;
if(n==1)//仅剩一发子弹
{
for(i=0;i<11;i++)
{
a[n]=i;
if(i>=s) {for(j=4;j>1;j--)
printf("%d",a[j]);}

}
}

else//还剩多发子弹
{
for(i=0;i<11;i++)//枚举本发子弹的所有可能性,假设n等于5,则求的为第一发子弹所有可能性
{
a[n]=i;
shoot(n-1,s-i);
}
}

}
main()
{ int a[100];
shoot(5,45);

}
...全文
260 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
buyong 2014-04-09
  • 打赏
  • 举报
回复
引用 5 楼 u010107248 的回复:
那个char **argv是二级指针吗?大神!!我刚入门啊。。。[quote=引用 4 楼 zhao4zhong1 的回复:] 仅供参考
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 26
int comb[MAX_NUM];
int c1,c2;
void combination(int m,int n) {
    int i,j;

    for (i=m;i>=n;i--) {
        comb[n]=i; /* 选择当前的“头”元素 */
        if (n>1) {
            combination(i-1,n-1); /* 进入下一次更小的组合问题 */
        } else { /* 满了需要的组合数,输出 */
            for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);
            printf("\n");
        }
    }
    return;
}
int main(int argc,char **argv) {
    if (argc<3) {
        printf("%s 组合下标 组合上标\n",argv[0]);
        return 1;
    }
    c1=atoi(argv[1]);
    if (c1<1 || MAX_NUM<c1) {
        printf("1<=组合下标<=%d\n",MAX_NUM);
        return 2;
    }
    c2=atoi(argv[2]);
    if (c2<1 || c1<c2) {
        printf("1<=组合上标<=组合下标\n");
        return 3;
    }
    comb[0]=c2;
    combination(c1,c2);
    return 0;
}
引用 4 楼 zhao4zhong1 的回复:
仅供参考
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 26
int comb[MAX_NUM];
int c1,c2;
void combination(int m,int n) {
    int i,j;

    for (i=m;i>=n;i--) {
        comb[n]=i; /* 选择当前的“头”元素 */
        if (n>1) {
            combination(i-1,n-1); /* 进入下一次更小的组合问题 */
        } else { /* 满了需要的组合数,输出 */
            for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);
            printf("\n");
        }
    }
    return;
}
int main(int argc,char **argv) {
    if (argc<3) {
        printf("%s 组合下标 组合上标\n",argv[0]);
        return 1;
    }
    c1=atoi(argv[1]);
    if (c1<1 || MAX_NUM<c1) {
        printf("1<=组合下标<=%d\n",MAX_NUM);
        return 2;
    }
    c2=atoi(argv[2]);
    if (c2<1 || c1<c2) {
        printf("1<=组合上标<=组合下标\n");
        return 3;
    }
    comb[0]=c2;
    combination(c1,c2);
    return 0;
}
[/quote] 这是main函数的标准写法之一,刚入门就应该掌握。
铁锈_ 2014-04-09
  • 打赏
  • 举报
回复
那个char **argv是二级指针吗?大神!!我刚入门啊。。。
引用 4 楼 zhao4zhong1 的回复:
仅供参考
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 26
int comb[MAX_NUM];
int c1,c2;
void combination(int m,int n) {
    int i,j;

    for (i=m;i>=n;i--) {
        comb[n]=i; /* 选择当前的“头”元素 */
        if (n>1) {
            combination(i-1,n-1); /* 进入下一次更小的组合问题 */
        } else { /* 满了需要的组合数,输出 */
            for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);
            printf("\n");
        }
    }
    return;
}
int main(int argc,char **argv) {
    if (argc<3) {
        printf("%s 组合下标 组合上标\n",argv[0]);
        return 1;
    }
    c1=atoi(argv[1]);
    if (c1<1 || MAX_NUM<c1) {
        printf("1<=组合下标<=%d\n",MAX_NUM);
        return 2;
    }
    c2=atoi(argv[2]);
    if (c2<1 || c1<c2) {
        printf("1<=组合上标<=组合下标\n");
        return 3;
    }
    comb[0]=c2;
    combination(c1,c2);
    return 0;
}
引用 4 楼 zhao4zhong1 的回复:
仅供参考
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 26
int comb[MAX_NUM];
int c1,c2;
void combination(int m,int n) {
    int i,j;

    for (i=m;i>=n;i--) {
        comb[n]=i; /* 选择当前的“头”元素 */
        if (n>1) {
            combination(i-1,n-1); /* 进入下一次更小的组合问题 */
        } else { /* 满了需要的组合数,输出 */
            for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);
            printf("\n");
        }
    }
    return;
}
int main(int argc,char **argv) {
    if (argc<3) {
        printf("%s 组合下标 组合上标\n",argv[0]);
        return 1;
    }
    c1=atoi(argv[1]);
    if (c1<1 || MAX_NUM<c1) {
        printf("1<=组合下标<=%d\n",MAX_NUM);
        return 2;
    }
    c2=atoi(argv[2]);
    if (c2<1 || c1<c2) {
        printf("1<=组合上标<=组合下标\n");
        return 3;
    }
    comb[0]=c2;
    combination(c1,c2);
    return 0;
}
赵4老师 2014-03-31
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 26
int comb[MAX_NUM];
int c1,c2;
void combination(int m,int n) {
    int i,j;

    for (i=m;i>=n;i--) {
        comb[n]=i; /* 选择当前的“头”元素 */
        if (n>1) {
            combination(i-1,n-1); /* 进入下一次更小的组合问题 */
        } else { /* 满了需要的组合数,输出 */
            for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);
            printf("\n");
        }
    }
    return;
}
int main(int argc,char **argv) {
    if (argc<3) {
        printf("%s 组合下标 组合上标\n",argv[0]);
        return 1;
    }
    c1=atoi(argv[1]);
    if (c1<1 || MAX_NUM<c1) {
        printf("1<=组合下标<=%d\n",MAX_NUM);
        return 2;
    }
    c2=atoi(argv[2]);
    if (c2<1 || c1<c2) {
        printf("1<=组合上标<=组合下标\n");
        return 3;
    }
    comb[0]=c2;
    combination(c1,c2);
    return 0;
}
lm_whales 2014-03-31
  • 打赏
  • 举报
回复
求环数和 >= n* 9 的组合数 由于是组合数,所以可以不考虑顺序 1)所有都大于9环(m 10 ,n-m 9)若干 2)所有都等于9环只有一种情况 3)m 个10,K个9 混合 n -m-k 个9一下 >= 若干, 4)m个10 n -m 个9一下 >= 若干 5)m个10 n -m 个9一下 >= 若干 所有组合若干 如果求排列。方法一样
kzh125 2014-03-29
  • 打赏
  • 举报
回复
你的问题都说的不清楚,怎么解答啊,你的算法目的是什么,说清楚啊。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧