为什么结果为零 实验6.3

img


#include 
#include 
#include 
using namespace std;

int main() {
    int N, M, K, x, y, j, i;
    float s, c;
    cin >> N;
    set<int> a[50];
    for (i = 1; i <= N; i++) {
        cin >> M;
        for (j = 0; j < M; j++) {
            cin >> x;
            a[i].insert(x);
        }
    }
    set<int> b;
    set<int>::iterator its;
    set<int>::iterator it;
    cin >> K;
    for (i = 0; i < K; i++) {
        c = 0;
        cin >> x >> y;
        for (it = a[x].begin(); it != a[x].end(); it++)
            b.insert(*it);
        for (its = a[y].begin(); its != a[y].end(); its++) {
            b.insert(*its);
            if (*its == *it)
                c++;
        }
        s = c * 100.0/b.size();
        printf("%.2f%\n", s);
    }
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你看下这篇博客吧, 应该有用👉 :深入理解计算机系统 习题3.4
  • 除此之外, 这篇博客: 7.1 字符输入与输出中的 2.3 一定需要缓冲区吗 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    显然不是,比如我们在玩游戏的时候一般会用到wasd四个键控制方向,而且一般来说都是需要按下即响应.试想此时如果使用了缓冲区,按一下按键还要敲一下回车才能响应,这游戏也就没法玩了.

    所以还是看情况,需要和不需要缓冲区的情况都是存在的.

  • 以下回答来自chatgpt:

    抱歉,根据提供的信息,我无法确定实验6.3的具体内容,也无法判断出导致结果为零的可能性。请提供更具体的问题描述和步骤,我会尽力帮助解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。