程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 729 - The Hamming Distance Problem

729 - The Hamming Distance Problem

編輯:C++入門知識

[cpp] view plaincopyprint?
描述:和前面的幾道水題一樣,還是兩種代碼,使用庫函數的話耗時比較少一點,用劉汝佳的生成可重集排列的方法耗時多,沒什麼難度 
 
 
 
代碼一: 
 
 
 
#include <iostream> 
#include <cstdio> 
#include <cstring> 
#include <algorithm> 
using namespace std; 
int main() 

    //freopen("a.txt","r",stdin); 
    char s[20]; 
    int n,len,m; 
    scanf("%d",&n); 
    while(n--) 
    { 
        scanf("%d%d",&len,&m); 
        memset(s,0,sizeof(s)); 
        for(int i=0;i<len-m;i++) s[i]='0'; 
        for(int i=len-m;i<len;i++) s[i]='1'; 
        do 
        { 
            printf("%s\n",s); 
        }while(next_permutation(s,s+len)); 
        if(n) printf("\n"); 
    } 
    return 0; 

 
 
 
代碼二: 
 
 
 
#include <iostream> 
#include <cstdio> 
#include <cstring> 
#include <algorithm> 
using namespace std; 
void print_permutation(char *s,char *str,int len ,int cur) 

    if(cur==len) printf("%s\n",str); 
    else for(int i=0;i<len;i++) 
    if(!i||s[i]!=s[i-1]) 
    { 
        int c1(0),c2(0); 
        for(int j=0;j<len;j++) if(s[i]==s[j]) c1++; 
        for(int j=0;j<cur;j++) if(s[i]==str[j]) c2++; 
        if(c2<c1) 
        { 
            str[cur]=s[i]; 
            print_permutation(s,str,len,cur+1); 
        } 
    } 

int main() 

    //freopen("a.txt","r",stdin); 
    char s[20],str[20]; 
    int n,len,m; 
    scanf("%d",&n); 
    while(n--) 
    { 
        scanf("%d%d",&len,&m); 
        memset(s,0,sizeof(s)); 
        for(int i=0;i<len-m;i++) s[i]='0'; 
        for(int i=len-m;i<len;i++) s[i]='1'; 
        memset(str,0,sizeof(str)); 
        print_permutation(s,str,len,0); 
        if(n) printf("\n"); 
    } 
    return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved