Java教程

12.3赛

本文主要是介绍12.3赛,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

\(12\)月\(3\)号算协小组赛

前言

本次比赛由杨锋同学出题,伍树明同学验题。

每题题解

1.

定义一个数从1开始计数,在for循环中如果s可以被k整除就输出ABC,否则输出s,每一次循环s都要加1。输出时注意空格和换行。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    int n, k, s = 1;
    cin >> n >> k;
    for(int i = 1; i <= n ; i ++)
    {
        for(int j = 1; j <= n; j ++)
        {
            if(s % k == 0)
            {
                cout << "ABC" << " ";
            }
            else
            {
                cout << s << " ";
            }
            s ++;
        }
        cout << endl;
    }
    return 0;
}

2.

仔细观察注意到矩阵对角线上都是\(1\),每行从对角线位置起依次加一,每列从对角线位置起依次加一。于是很容易想到模拟

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 105;
int a[N][N];
int b[N];
int n;

int main()
{
    for(int i = 0; i < N; ++ i) b[i] = i + 1;
    cin >> n;
    while(n)
    {
        memset (a, 0, sizeof a);
        for(int i = 0; i < n; ++ i)
        {
            int j = i;
            int tt = 0;
            for(int k = i; k < n; ++ k) a[i][k] = ++tt; //行
            tt = 0;
            for(int k = i; k < n; ++ k) a[k][j] = ++ tt; //列
        }
        
        //输出
        for(int i = 0; i < n; ++ i)
        {
            for(int j = 0; j < n; ++ j)
            {
                cout << a[i][j] << ' ';
            }
            puts("");
        }
        cout << endl;
        cin >> n;
    }
    return 0;
}

如果你观察仔细的话还能发现以下规律

#include <iostream>
#include <algorithm>

using namespace std;

int n;

int main()
{
    while (cin >> n)
    {
        for (int i = 0; i < n; i ++ )
        {
            for (int j = 0; j < n; j ++ )
                cout << abs(i - j) + 1 << ' ';  // 规律

            cout << endl;
        }

        if (n) cout << endl;
    }

    return 0;
}  

3.

双指针题型。找到每段小串后输出小串的第一个字符。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    scanf("%d\n",&n);
    string s, g;
    getline(cin,s);
    //双指针
    for(int i = 0; i < s.size(); i ++)
    {
        int j = i;
        g += s[i];
        while(s[j] == s[i])
            j ++;
        i = j - 1;
    }
    cout << g;
    return 0;
}
这篇关于12.3赛的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!