2023短学期0913题解

将字符串作为输入流来处理(提取单词)

【C系列4.7】函数训练之暗号

Description

  cyn小朋友今天参加了小学举办的侦探活动,她的任务是从暗号纸条的内容上找出特工Q给出的所有的暗号(即Q开头的单词)

Input

  输入一串含有空格的字符串,字符串的长度不超过300。

Output

  按顺序每行输出一个找到的首字母为Q或q的单词。

Samples

input

Queen and quick run from this site

output

Queen
quick

Solution

  istringstream 是 C++ 标准库中的一个类,它用于将字符串作为输入流来处理。在上述代码中,我们首先使用 std::getline 函数从标准输入中读取一行字符串,并将它存储在 input 变量中。
  然后,我们创建了一个 istringstream 对象,名为 iss,并将之前读取的字符串 input 传递给它。接下来,我们可以使用 iss 就像处理标准输入一样,从中逐个提取单词。
  这个做法的好处是,它允许我们使用标准的输入流操作来处理输入的字符串,就像处理标准输入一样,这样我们可以使用 >> 操作符逐个提取单词,使代码更加清晰和简洁。
  所以,istringstream 允许我们将一个字符串作为输入流来处理,方便地从中提取数据。

#include<bits/stdc++.h>
using namespace std;

int main() {
    string input;
    getline(cin, input);
    istringstream iss(input);
    string word;
    while (iss >> word) {
        if (word[0] == 'Q' || word[0] == 'q') {
            cout << word << endl;
        }
    }
    return 0;
}

二进制加法

Description

计算机使用的是二进制,和十进制不同的是:二进制运算“逢二进一”。下面举一个二进制加法的运算实例:

 11101
+ 110
————
100011

1所在的位置:

6、2、1

你的任务是:对于任意的两个正的二进制数,求它们和中“1”所在的位置。

Input

有多组测试数据,每组测试数据共两行:

第一行:二进制的加数A,总长度<=200。

第二行:二进制的加数B,总长度<=200。

Output

输出二进制数A+B中“1”所在的位置,位置排序为从左到右:N、N-1、N-2...1,数据之间用空格分隔,行末没有多余的空格。

温馨提醒:

输出小技巧。如何在不确定何时为第一次输出,也不知道何时为最后一次输出时控制末尾的空格,使程序不会在末尾多输出一个空格导致程序错误。下面是一个例子:

int i, hasPrinted;
hasPrinted = 0;
for (i=0; i<n; i++) {
    if (xxxxxxxx) { // 这里写输出的判定条件
        if (!hasPrinted) {// 如果没有进行过输出
            printf(“%d”, n[i]); // 根据你的情况输出,不一定就是%d和n[i]
            hasPrinted = 1;
        } else {
            printf(“ %d”, n[i]);
        }
    }
}

这样你的输出就不会在末尾多出一个空格了!

Samples

input

111
110
11101
110

output

4 3 1
6 2 1

Hint

博客题解:https://blog.csdn.net/balalinhq/article/details/107030238

Solution

#include<bits/stdc++.h>
using namespace std;

// 函数用于计算两个二进制字符串的和
string binaryAddition(const string& a, const string& b) {
    int carry = 0;  // 进位初始化为0
    string result = "";
    int i = a.length() - 1;
    int j = b.length() - 1;

    while (i >= 0 || j >= 0 || carry > 0) {
        int sum = carry;  // 当前位的和等于进位值
        if (i >= 0) {
            sum += a[i] - '0';  // 加上第一个二进制数的当前位(将字符转换为整数)
            i--;
        }
        if (j >= 0) {
            sum += b[j] - '0';  // 加上第二个二进制数的当前位(将字符转换为整数)
            j--;
        }

        result = char('0' + sum % 2) + result;  // 计算当前位的值,并将其添加到结果字符串的前面
        carry = sum / 2;  // 更新进位
    }

    return result;
}

// 函数用于输出二进制数中"1"所在的位置
void printOnesPosition(const string& binaryNumber) {
    bool firstPrint = true;

    for (int i = 0; i <= binaryNumber.length() - 1; i++) {
        if (binaryNumber[i] == '1') {
            if (!firstPrint) {
                cout << " ";//如果不是第一次输出,则先输出一个空格,再输出值                
            }
            cout << binaryNumber.length() - i;
            firstPrint = false;
        }
    }
    cout << endl;
}

int main() {
    string binaryA, binaryB;

    while (cin >> binaryA >> binaryB) {
        string result = binaryAddition(binaryA, binaryB);
        printOnesPosition(result);
    }

    return 0;
}

呆滞,怎会如此

梅坞春早

Description

  西湖十景之九,梅家坞溪谷深广,常年草木繁盛,峰峦叠翠,即使数九寒冬,也不掩如春天气象。梅家坞盛产茶叶,为“西湖龙井”中的珍品。“春”在梅坞便是茶香之意,每当清明时节,云雾缭绕的山坡上,采茶女的身影隐现在碧绿如茵的茶园之间,鸟鸣茶歌,婉转相应,为秀美山水平添了一份灵气,也是春天西湖独特的人文景色。——百度百科
  JLS发现茶山上共有2n棵茶树一字排开,于是想到一个游戏,他对KK说:“我们轮流摘茶叶,每次我和你挑选最左或最右的一颗茶树,摘光上面的茶叶,摘过的茶树不再算在可摘的范围内,我们比比谁最后摘到的多,我们猜拳决定先后!”,KK没有多想就答应了。
  已知KK和JLS都是两个绝顶聪明的人,请问最后谁会摘到更多的茶叶呢?

Toggle Code
#include <stdio.h>
int check(int a[],int len,int k);
int main()
{
	int a[210];
	int t;
	int n,k;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&k);
		for(int i=0;i<2*n;++i)
		{
			scanf("%d",&a[i]);
		}
		if(check(a,2*n,k)==0)
		{
			puts("KKTXDY");
		}
		else
		{
			puts("JLSTXDY");
		}
	}
}

Input

  第一行输入一个数字T代表有T组输入(T≤10)

  每组输入第一行输入两个数字n,k代表茶树上共有2n棵茶树,k=1代表JLS先摘,k=0代表KK先摘(1≤n≤100,0≤k≤1)

  每组输入第二行输入2n个数字ai,(0≤ai≤100)表示从左到右的茶树,其中ai表示这棵茶树上共有ai片茶叶

Output

 若JLS能摘到更多的茶叶,输出JLSTXDY

 否则输出KKTXDY

Samples

input

2
2 1
1 2 3 4
2 0
9 8 7 6

output

JLSTXDY
KKTXDY

Hint

第一组:

JLS首先摘光a4

此时无论KK摘a1还是a3,JLS都可以摘走a2,总共摘到6片茶叶胜出

第二组:

KK首先摘光a1

此时无论JLS摘a2还是a4,KK都可以摘走a3,总共摘到16片茶叶胜出

P.S.相同茶叶数量先手获胜

本题为函数题,如果使用C语言提交,只需要提交check()函数,程序主体在题面中

注意:两个都是绝顶聪明+地图全开。

Solution

int check(int a[], int len, int k) {
    return k;
}
posted @ 2023-09-13 12:26  yoongii  阅读(164)  评论(0)    收藏  举报