NYOJ366D의 작은 L과 NYOJO32의 조합수와 NYOJ19가 배열을 잘하는 소명과 NYOJ488의 소수환[귀속]

3907 단어 inipermutation
원제 링크:366:클릭하여 링크 열기32:클릭하여 링크 열기19:클릭하여 링크 열기488:클릭하여 링크 열기.
이 몇 문제를 보면 모두 귀환으로 해답을 구할 수 있다.귀환ac로 이 몇 문제를 완성한 후에 귀환은 마땅히 파악해야 할 차이가 많지 않다.오늘 이 네 문제를 총괄해 봅시다.이 네 개의 문제는 기본적으로 똑같이 돌아가며 사이를 조금만 바꾸면 된다.
19 배열에 능한 샤오밍:
이것은 귀속만 쓸 수 있을 것 같다.
코드는 다음과 같습니다.
 
 
#include<stdio.h>
#include<string.h>
int n,m;
int ok[15];//
int num[15];// 
int ac[15];// 
void f(int l)
{
	int a,b;
	if(l==m)
	{
		for(a=0;a<m;a++)
			printf("%d",num[a]);
		printf("
"); //return; } else { for(b=0;b<n;b++) { if(ac[b]>0) { num[l]=ok[b]; ac[b]--; f(l+1); ac[b]++; } } } } int main() { int a,b,k; for(a=0;a<10;a++) ok[a]=a+1; scanf("%d",&k); while(k--) { scanf("%d%d",&n,&m); for(a=0;a<=n;a++) ac[a]=1; memset(num,0,sizeof(num)); f(0); } }

336D의 작은 L:
이것도 넥스트로...permutation으로 해답을 구하다.귀속 호출 코드는 붙이지 않습니다.코드는 다음과 같습니다.
 
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    int a[]={1,2,3,4,5,6,7,8,9};
    int k,n,i;
    scanf("%d",&k);
    while(k--)
	{
       scanf("%d",&n);
       do
	   {
          for(i=0;i<n;i++)
		  {
               printf("%d",a[i]);
		  }
          printf("
"); } while(next_permutation(a,a+n)); } return 0; }

32 조합:
먼저 배열을 잘하는 샤오밍을 보고 나서 이 문제를 보면 매우 자유롭다.
 
 
#include<stdio.h>
#include<string.h>
int n,m;
int ok[15];//
int num[15];// 
int ac[15];// 
void f(int l)
{
	int a,b;
	if(l==m)
	{
		for(a=0;a<m;a++)
			printf("%d",num[a]);
		printf("
"); } else { if(l==0) { for(b=n-1;b>=m-1;b--) { if(ac[b]>0) { num[l]=ok[b]; ac[b]--; f(l+1); ac[b]++; } } } else { for(b=n-1;b>=0;b--) { if(ac[b]>0) { if(l>=1&&ok[b]<num[l-1]) { num[l]=ok[b]; ac[b]--; f(l+1); ac[b]++; } } } } } } int main() { int a,b,k; for(a=0;a<10;a++) ok[a]=a+1; while(scanf("%d%d",&n,&m)!=EOF) { for(a=0;a<=n;a++) ac[a]=1; memset(num,0,sizeof(num)); f(0); } }

488 소수 루프:
위의 두 개의 귀속을 알고 다시 보면 이것은 매우 자유로운 것 같지만, 이것은 귀속만 사용하면ac가 될 수 없다.시간 초과할 거예요.처리할 때 작은 규칙이 있다.입력한 n% 2 = 1 & n!1 은 무조건 No Answe입니다.이 상황들은 더 이상 귀속되지 마라.안 그러면 너도 나처럼 비극적이야.나는 두 번 비극을 당했다.
코드:
 
#include<stdio.h>
#include<string.h>
int ac[25]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
int yi[25],sushu[50];
int ok[25]={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22};
int loop,n;
void f(int i)
{
	int a,b;
	if(i==n)
	{
		printf("1 ");
		for(a=0;a<n;a++)
			printf("%d ",yi[a]);
		printf("
"); loop=1; } else { for(a=0;a<n;a++) { if(i==n-1) { if(ac[a]==1&&sushu[1+ok[a]]==0&&sushu[yi[i-1]+ok[a]]==0) { yi[i]=ok[a]; ac[a]--; f(i+1); ac[a]++; } } else if(i==0) { if(ac[a]==1&&sushu[1+ok[a]]==0) { yi[i]=ok[a]; ac[a]--; f(i+1); ac[a]++; } } else { if(ac[a]==1&&sushu[yi[i-1]+ok[a]]==0) { yi[i]=ok[a]; ac[a]--; f(i+1); ac[a]++; } } } } } int main() { int a,b,j=1; memset(sushu,0,sizeof(sushu)); for(a=2;a<45;a++) for(b=a+a;b<45;b+=a) { if(sushu[b]==0) sushu[b]=1; } while(1) { scanf("%d",&n); loop=0; if(n==0) break; printf("Case %d:
",j++); if(n%2&&n!=1) printf("No Answer
"); else { n--; f(0); } } }

좋은 웹페이지 즐겨찾기