1 solutions

  • 0
    @ 2024-12-11 0:16:56

    C :

    #include "stdio.h"
    void F(int a[],int i,int n,int r)
    {
    	if(i==r)
    	{
    		int j;
    		for(j=0;j<r;j++)
    			printf("%3d",a[j]);
    		printf("\n");
    	}
    	else
    	for(a[i]=a[i-1]+1;a[i]<=n-r+i+1;a[i]++)
    			F(a,i+1,n,r);
    }
    main()
    {
    	int n,r;
    	int a[20];
    	scanf("%d%d",&n,&r);
    	if(1<n&&n<21&&1<=r&&r<=n)
    		for(a[0]=1;a[0]<=n-r+1;a[0]++)
    			F(a,1,n,r);
    }
    

    C++ :

    #include <iostream>
    #include <stdio.h>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    bool is_used[30];
    int n;
    int r;
    int a[30];
    void f(int i){
    	int j;
    	if(i==r){
    		for(j=0;j<r;j++){
    			
    			printf("%3d",a[j]);
    		//	cout<<a[j];
    		}
    		printf("\n");
    		return ;
    	}
    	for(j=a[i-1]+1;j<=n;j++){
    		if(!is_used[j]){
    			is_used[j]=true;
    			a[i]=j;
    			f(i+1);
    			is_used[j]=false;
    		}	
    	}
    }
    int main()
    {
    	
    	int i,j;
    	while(scanf("%d %d",&n,&r)!=EOF){
    		memset(is_used,false,sizeof(is_used));
    		a[0]=0;
    		f(0);
    	}
    	return 0;
    }
    

    Pascal :

    var n,m,i:longint;
        a,b:array[0..1000] of longint;
    procedure dfs(t:longint);
    var i,j:longint;
    begin
      if t>m then
      begin
        for i:=1 to m do write(a[i]:3);
        writeln;
        exit;
      end;
      for i:=a[t-1]+1 to n do
      begin
        a[t]:=i;
        dfs(t+1);
      end;
    end;
    begin
      readln(n,m);
      for i:=1 to n do
        b[i]:=0;
      dfs(1);
    end.
    
    • 1

    Information

    ID
    681
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By