B. Obtaining the String

题目链接:http://codeforces.com/problemset/problem/1015/B

 

  • 题目大意:

  • 给你两个字符串s、t,长度均为n,你每次只能将si-1与si交换位置,如果最终能将s交换成为t,则输出最小的交换次数,否则输出-1

  • 思路:使用贪心的思想即可。

  • 从1到n枚举t的每一位,若ti!=si,则寻找sj(j>i)于ti相同,若无法找到j则输出-1。否则让sj不断与sj-1交换位置,直到i=j

  • 代码实现:

#include<bits/stdc++.h>//万能头文件
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    char s[101],t[101];
    int top=0;
    int b[5100];
    int i;
    for(i=1; i<=n; i++)
        cin>>s[i];
    for(i=1; i<=n; i++)
        cin>>t[i];
    int j;
    for(i=1; i<=n; i++)
    {
        if(t[i]!=s[i])
        {
            j=i+1;

            while(s[j]!=t[i]&&j<=n+10)
                j++;
            j--;
            if(j>n)
            {
                puts("-1");
                return 0;
            }
            for(; j>=i; j--)
            {
                b[++top]=j;
                swap(s[j],s[j+1]);
            }
        }
    }
    printf("%d\n",top);
    for(i=1; i<=top; i++)
    {
        if(i==top)printf("%d\n",b[i]);
        else printf("%d ",b[i]);
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sure, here is an example implementation of the main method in the TestPerson.java file based on your requirements: ```java import java.util.Scanner; public class TestPerson { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Person[] persons = new Person[3]; // Instantiate each Person object by obtaining the necessary attribute values from a user for (int i = 0; i < persons.length; i++) { System.out.println("Enter details for Person " + (i + 1) + ":"); System.out.print("Name: "); String name = scanner.nextLine(); System.out.print("Address: "); String address = scanner.nextLine(); System.out.print("PPS Number: "); String ppsNo = scanner.nextLine(); persons[i] = new Person(name, address, ppsNo); } // Print the information of the first person to the screen System.out.println("Name: " + persons[0].getName()); System.out.println("Address: " + persons[0].getAddress()); System.out.println("PPS Number: " + persons[0].getPPSNo()); // Change information on the second Person persons[1].setName("John Doe"); persons[1].setAddress("123 Main Street"); // Print all the information for all People to the screen for (Person person : persons) { person.showPerson(); } // Call the toString() method on the 3rd Person object in the array System.out.println(persons[2].toString()); } } ``` Note that this implementation assumes that the `Person` class has the following methods: ```java public class Person { private String name; private String address; private String ppsNo; public Person(String name, String address, String ppsNo) { this.name = name; this.address = address; this.ppsNo = ppsNo; } public String getName() { return name; } public String getAddress() { return address; } public String getPPSNo() { return ppsNo; } public void setName(String name) { this.name = name; } public void setAddress(String address) { this.address = address; } public void showPerson() { System.out.println("Name: " + name); System.out.println("Address: " + address); System.out.println("PPS Number: " + ppsNo); } @Override public String toString() { return "Person{name='" + name + "', address='" + address + "', ppsNo='" + ppsNo + "'}"; } } ``` Sample output: ``` Enter details for Person 1: Name: Alice Smith Address: 456 Elm Street PPS Number: 1234567A Enter details for Person 2: Name: Bob Johnson Address: 789 Oak Road PPS Number: 1234567B Enter details for Person 3: Name: Claire Davis Address: 1010 Maple Avenue PPS Number: 1234567C Name: Alice Smith Address: 456 Elm Street PPS Number: 1234567A Name: John Doe Address: 123 Main Street PPS Number: 1234567B Name: Claire Davis Address: 1010 Maple Avenue PPS Number: 1234567C Person{name='Claire Davis', address='1010 Maple Avenue', ppsNo='1234567C'} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值