zoukankan      html  css  js  c++  java
  • ZOJ 1201 Inversion

    原题链接

    题目大意:给一个数组{ A1,A2,…,An } ,要求生成另一个数组B1,B2,…,Bn,使得Bi表示的是在数组A中排在i前面大于i的数字的个数。题目的输入是数组A(字母P表示)或者数组B(字母I表示),要求输出对应的B或者A。

    解法:先读取首字母,如果是P,则调用permutation(),反之调用inversion()。permutation是按照正常方法寻找。inverse是先设置一个空的数组(相当于A数组),按照B数组的顺序一个个往‘A’中放。

    参考代码:

    #include<iostream>
    using namespace std;
    
    
    void permutation();
    void inversion();
    int i,j,n,a[50],b[50];
    
    int main(){
    	char c;
    	while(cin>>n && n!=0){
    		cin>>c;
    		for(i=0;i<n;i++)
    			cin>>a[i];
    		if(c=='P')
    			permutation();
    		else if(c=='I')
    			inversion();
    	}
    
    
    	return 0;
    }
    
    void permutation(){
    	for(i=0;i<n;i++){
    		b[i]=0;
    		for(j=0;j<n;j++){
    			if(a[j]>i+1)
    				b[i]++;
    			if(a[j]==i+1)
    				break;
    		}
    	}
    	for(i=0;i<n-1;i++)
    		cout<<b[i]<<' ';
    	cout<<b[n-1]<<'
    ';
    }
    
    void inversion(){
    	int num,p;
    	for(i=0;i<n;i++)
    		b[i]=0;
    	for(i=0;i<n;i++){
    		num=a[i];
    		p=0;
    		while(num>=0){
    			if(b[p]==0)
    				num--;
    			p++;
    		}
    		b[--p]=i+1;
    	}
    	for(i=0;i<n-1;i++)
    		cout<<b[i]<<' ';
    	cout<<b[n-1]<<'
    ';
    }
  • 相关阅读:
    第一天站立会议
    Sprint会议计划
    软件需求分析
    团队介绍
    再写行转列和列转行
    二十三种设计模式之:组合(Composite)模式(部分·整体模式)
    对于类和对象的认识
    对排序的认识
    设计模式分类
    二十三种设计模式之:适配器模式
  • 原文地址:https://www.cnblogs.com/naive/p/3568804.html
Copyright © 2011-2022 走看看