首页 > 试题广场 >

编排字符串

[编程题]编排字符串
  • 热度指数:8401 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

请输入字符串,最多输入个字符串,要求后输入的字符串排在前面,例如

输入:EricZ

输出:1=EricZ

输入:David

输出:1=David 2=EricZ

输入:Peter

输出:1=Peter 2=David 3=EricZ

输入:Alan

输出:1=Alan 2=Peter 3=David 4=EricZ

输入:Jane

输出:1=Jane 2=Alan 3=Peter 4=David


输入描述:
第一行为字符串个数m,接下来m行每行一个字符床,m不超过100,每个字符床长度不超过20。


输出描述:
输出m行,每行按照样例格式输出,注意用一个空格隔开。
示例1

输入

5
EricZ
David
Peter
Alan
Jane

输出

1=EricZ
1=David 2=EricZ
1=Peter 2=David 3=EricZ
1=Alan 2=Peter 3=David 4=EricZ
1=Jane 2=Alan 3=Peter 4=David
简洁版,自我感觉还是挺良好的hhh
#include<iostream>
using namespace std;
int main() {
    int m;
    char ch[100][20];
    cin >> m;
    for (int i = 0; i < m; i++)
        cin >> ch[i];
    for (int i = 0; i < m; i++) {
        for (int j = i; j >= 0 && j >= i - 3; j--)
            cout << i - j + 1 << "=" << ch[j] << " ";
        cout << endl;
    }
}

发表于 2019-02-24 21:06:27 回复(0)
#include<bits/stdc++.h>
int main(){
    int n;
    char a[4][21]={};//设置可以容纳4个字符串的首尾相连的环形数组
    while(scanf("%d ",&n)!=EOF)
        for(int i=0;i<n;i++){
            int s=i%4;//只保存最新的4个字符串
            scanf("%s ",a[s]);
            for(int j=0;j<4;j++)
                if(a[s][0]!=0){
                    printf("%d=%s ",j+1,a[s]);
                    s=(s+3)%4;
                }//倒序输出4个字符串
            putchar('\n');
        }
}
编辑于 2019-03-09 14:18:25 回复(0)
Java 使用Stack
import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        Stack<String> stack = new Stack<>();
        for (int i = 0; i < n; i++) {
            String s = scanner.next();
            stack.remove(s);
            stack.push(s);
            for (int j = 1; j <= Math.min(stack.size(),4); j++) 
                System.out.print(j+"="+stack.get(stack.size()-j)+" ");
            System.out.println();
        }
    }
}


编辑于 2020-03-20 10:01:23 回复(0)

python解法

arr = []
for i in range(int(input())):
    arr.insert(0, input())
    print(" ".join([str(item + 1) + "=" + arr[item] for item in range(min(4, len(arr)))]))
发表于 2019-03-30 08:51:11 回复(0)
#include<stdio.h>
int main(){
    char a[20][100];int i,j,m,k;
    scanf("%d",&m);
    for(i=1;i<=m;i++)
    {
        scanf("%s",a[i]);
        for(j=i,k=1;j>=1&&k<=4;j--,k++)//双标倒序+最多四个
            printf("%d=%s ",k,a[j]);
        printf("\n");
    }
}

发表于 2020-05-10 14:10:53 回复(1)
m = int(input())
name = []
i = 0
# n = min(4, m)
for i in range(m):

    temp = input()
    name.append(temp)
    # print(name)
    n = len(name)
    if n <= 4:
        for j in range(n):
            # print(, end=' ')
            print(str(j + 1) + "=" + name[n-j-1], end=" ")
    else:
        i = 1
        j = name[-4:]
        
        for k in range(4):
            print(str(i) + "=" + j[4-k-1], end=" ")
            i += 1


    print(' ')

发表于 2019-03-27 13:15:52 回复(0)
m = int(input())
out = []
for i in range(1,m+1):
    out.append(input())
    print(' '.join([str(j)+'='+out[-j] for j in range(1,min(i+1,5))]))
发表于 2019-03-25 20:29:05 回复(0)
#include <iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    string s[100];
    for(int i = 0;i < n;i++){
        cin>>s[i];
        for(int j = i;i-j<4&&j>=0;j--){
            cout<<i-j+1<<"="<<s[j]<<" ";
        }
        cout<<endl;
    }
}

发表于 2019-03-06 14:09:54 回复(3)

用了栈的思想
#include <bits/stdc++.h>
using namespace std;
void printstack(stack <string> s){
	int i=4;
	while(i--){
		if(s.empty()) break;
		else cout<<4-i<<"="<<s.top()<<" ";
		s.pop();
	}
	cout<<endl;
}
int main(){
	int m;
	while(cin>>m){
		stack<string>s;
		string str;
		while(m--){
			cin>>str;
			s.push(str);
			printstack(s);
		}
	}
	return 0;
}


编辑于 2020-04-08 00:34:55 回复(0)
#include <iostream>
#include <stack>
#include <cstdio>
#include <string>
using namespace std;

int main() {
    int m;
    while (cin >> m ) {
        char s[10][21];
        for(int i=0;i<m;i++){
            cin >> s[i];
        }
        stack<string> st;
        for(int i=0;i<m;i++){
            for(int j=0;j<=i;j++){
                st.push(s[j]);
            }
            int c=st.size();
            for(int k=0;k<c&&k<4;k++){
            printf("%d=%s ",k+1,st.top().c_str());
            st.pop();
            }
            printf("\n");
        }
    }
}

发表于 2024-03-23 10:22:36 回复(0)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
    int n;
    cin >> n;
    string str;
    vector<string> vec;
    while(n--){
        cin >> str;
        vec.push_back(str);
        if(vec.size()<=4){
            int j=1;
            for(int i=vec.size()-1; i>=1; --i, ++j){
                cout << j << "=" << vec[i] << ' ';
            }
            cout << j << "=" << vec[0] << endl;
        }else{
            for(int i=vec.size()-1, j=1; i>=vec.size()-3; --i, ++j){
                cout << j << "=" << vec[i] << ' ';
            }
            cout << "4=" << vec[vec.size()-4] << endl;
        }
    }
}

编辑于 2024-03-16 20:09:15 回复(0)
n = int(input())
ans = []

for _ in range(1, n+1):
    sysin = input()
    ans.append(sysin)

    temp = ans.copy()
    for i in range(1, min(len(ans)+1, 5)):
        print(f"{i}={temp.pop()}", end=' ')

    print()
编辑于 2024-03-04 16:31:55 回复(0)
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main(){
    int m;
    while(scanf("%d",&m) != EOF){
        string str;
        vector<string> vec;
        for(int i = 0;i < m; ++i){
            cin>>str;
            vec.insert(vec.begin(),str); //vector头部插入字符串
            for(int j = 0; j < vec.size() && j <4; ++j){ 
                cout<<j+1<<"="<<vec[j]<<" ";
            }
            cout<<endl;
        }
    }
    return 0;
}

发表于 2023-03-24 21:46:01 回复(0)
//双端队列
#include <iostream>
#include <string>
#include <deque>
using namespace std;

int main() {
    int n;
    while (cin >> n){
        getchar();
        deque<string> mdeque;
        for (int i = 0; i < n; ++i){
            string s;
            getline(cin, s);
            if (mdeque.size() == 4)
                mdeque.pop_back();
            mdeque.push_front(s);
            for (int j = 0; j < mdeque.size(); ++j)
                cout << j + 1 << '=' << mdeque[j] << " ";
            cout << endl;
        }
    }
}

发表于 2023-02-07 14:44:49 回复(0)
#include <iostream>
using namespace std;

int main() {
    int m;
    char str[100][20];
    cin >> m;
    for (int i = 0; i < m; i++) {
        cin >> str[i];
        for (int j = i, count = 1; j >= 0 && count <= 4; j--, count++) {
            cout << count << "=" << str[j];
            if (j == 0 || count == 4)cout << endl;
            else cout << " ";
        }
    }
}

发表于 2023-01-17 15:16:30 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main (){
    int n;
    cin >> n;
    vector<string> name;
    while (n --){
        string s;
        cin >> s;
        name.push_back(s);
        if (name.size() > 4) name.erase(name.begin());
        for (int i = name.size() - 1; i >= 0; -- i){
            cout << name.size() - i << "=" << name[i] << " " ;
        }
        cout << endl;
    }
}

发表于 2022-03-14 15:54:14 回复(0)
# include <iostream>
# include <string>

using namespace std;

const int MAX=100;

 int min(int x,int y)
 {
     if(x<y)
     {
         return x;
     }
     else
     {
         return y;
     }
 }
 
int main()
{
    int n;
    while(cin>>n)
    {
        string str[MAX];
        for(int i=0;i<n;i++)
        {
            cin>>str[i];
        }
        
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<=min(i,3);j++)
            {
                cout<<j+1<<"="<<str[i-j]<<" ";
            }
            cout<<endl;
        }
    
    }    
    return 0;
 } 

发表于 2022-02-15 10:50:28 回复(0)
看了别人写的代码,觉得自己的代码又臭又长
#include<stdio.h>
#include<string.h>
typedef struct fact
{
    char c[20];
}fact;
int main()
{
    fact a[100];
    int n;
    while (scanf("%d",&n)!=EOF)
    {
        int i,j,k,c=0,sum;
        getchar();
        for(i=0;i<n;i++) scanf("%s",a[i].c);
        j=0;
        k=0;
        while (c!=n)
        {
            sum=1;
            for(i=k;i>=j;i--)
            {
                printf("%d=%s ",sum,a[i].c);
                sum++;
            }
            printf("\n");
            if(k<3) k++;
            else
            {
                k++;
                j++;
            }
            c++;
        }
    }
    return 0;
}


发表于 2021-09-22 09:47:03 回复(0)
利用栈和值传递
#include <iostream>
#include <string>
#include <stack>
using namespace std;

void output(stack <string> st)
{
    if(!st.empty())
    {
        int tmp=st.size();
        if(tmp>4) tmp=4;
        for(int i=0;i<tmp;i++)
        {
            cout<<i+1<<"="<<st.top()<<" ";
            st.pop();
        }
    }
}

int main()
{
    int N;
    while(cin>>N)
    {
       stack <string> st;
        for(int i=0;i<N;i++)
        {
            string s;
            cin>>s;
            st.push(s);
            output(st);
            cout<<endl            
        }      
    }
    return 0;
}


发表于 2021-03-30 10:43:53 回复(0)