1 solutions
-
0
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