【2312】CIE C/C++二级 代码

//第一题===============================
#include <bits/stdc++.h>
using namespace std;
int n,l,r,cnt;
int s[10001];
int main(){
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>s[i];
	}
	cin>>l>>r;
	for(int i=1;i<=n;++i){
		if(s[i]>=l && s[i]<=r) cnt++;
	}
	cout<<cnt;
	return 0;
}
//第二题===============================
#include <iostream>
#include <cstring>
using namespace std;

int xjArr[9][9] = {0};
int newxjArr[9][9] = {0};

//8个方向:8邻域
int dx[] = {-1,-1,-1, 0, 0, 1,1,1};
int dy[] = {-1, 0, 1,-1, 1,-1,0,1};

int main()
{
    int m, n;
    cin >> m >> n;
    xjArr[4][4] = m;

    for (int k = 0; k < n; k++)
    {
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                if (xjArr[i][j] != 0)
                {
                    int x = xjArr[i][j];
                    newxjArr[i][j] += 2 * x;
                    int xjm = (10 * x - 2 * x) / 8;
                    //遍历8个方向,做边界判断
                    for(int d = 0; d < 8; d++)
                    {
                        int ni = i + dx[d];
                        int nj = j + dy[d];
                        //必须判断不越界
                        if(ni >=0 && ni <9 && nj >=0 && nj <9)
                        {
                            newxjArr[ni][nj] += xjm;
                        }
                    }
                }
            }
        }
        memcpy(xjArr, newxjArr, sizeof(xjArr));
        memset(newxjArr,0,sizeof(newxjArr));
    }

    //输出,处理末尾不要多余空格
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            if(j>0) cout << " ";
            cout << xjArr[i][j];
        }
        cout << endl;
    }
    return 0;
}
//第三题===================================
#include<iostream>
using namespace std;

int m;              // 方阵的阶数,矩阵大小是 m × m
int nArr[101][101] = {0};     // 保存方阵数据(题意:1 表示有值,0 表示空
int xNum = 0;       // 统计「某一行」中 1 的个数
int yNum = 0;       // 统计「某一列」中 1 的个数
int fx = 0;         // 保存需要修改的格子所在的行号(x 坐标)
int fy = 0;         // 保存需要修改的格子所在的列号(y 坐标)
int fxNum = 0;      // 统计「1 的个数是奇数」的行一共有几行
int fyNum = 0;      // 统计「1 的个数是奇数」的列一共有几列
int main() {
	// 1. 读入方阵的阶数 m
	cin >> m;

	// 2. 读入 m × m 的方阵数据
	for (int i = 0;i < m;i++) {
		for (int j = 0;j < m;j++) {
			cin >> nArr[i][j];
		}
	}
	// 3. 逐行、逐列统计,找出「1 的个数为奇数」的行和列
	for (int i = 0;i < m;i++) {
		for (int j = 0;j < m;j++) {
			if (nArr[i][j] == 1) {	// 累加第 i 行中 1 的个数
				xNum++;
			}
			if (nArr[j][i] == 1) {	// 累加第 i 列中 1 的个数
				yNum++;
			}
		}
		// (xNum + 1) % 2 == 0 等价于 xNum 是奇数,说明第 i 行有奇数个 1
		if ((xNum + 1) % 2 == 0) {
			fx = i;			// 记下这一行的行号,作为候选要修改的位置
			fxNum++;		// 奇数行的数量 +1
		}
		// 同理,判断第 i 列是否也有奇数个 1
		if ((yNum + 1) % 2 == 0) {
			fy = i;			// 记下这一列的列号,作为候选要修改的位置
			fyNum++;		// 奇数列的数量 +1
		}
		// 进入下一行/列之前,把计数器清零,避免累加
		xNum = 0;
		yNum = 0;
	}

	// 4. 根据统计结果给出结论
	if (fxNum >= 2 || fyNum >= 2)
	{
		// 奇数行(或奇数列)超过 1 个,只改一个格子无法让它们全部变成偶数
		cout << "Corrupt" << endl;
	}
	else if (fxNum == 0 && fyNum == 0)
	{
		// 所有行、列的 1 都是偶数个,本来就满足条件,无需修改
		cout << "OK" << endl;
	}
	else
	{
		// 恰好只有一个奇数行和一个奇数列,把它们交叉的那个格子翻转即可
		cout << fx+1 << " " << fy+1 << endl;
	}
	system("pause");	// 暂停窗口,防止控制台一闪而过(仅 Windows 有效)
	return 0;
}
//第四题=============================================
#include <bits/stdc++.h>
using namespace std;
string s[101];
int main(){
	int i=1;
	while(cin>>s[i]){
		i++;
	}
	sort(s+1,s+i);
	int a=unique(s+1,s+i)-s;//去重,返回末尾加一的地址
	for(int i=1;i<a;++i) cout<<s[i]<<endl; 
	return 0;
}
//第五题============================================
#include <iostream>
using namespace std;

// 判断一个数是不是好数,返回true代表是好数
bool isGood(int x)
{
    int cnt1 = 0, cnt0 = 0;
    while(x > 0)
    {
        if(x % 2 == 1)
            cnt1++;
        else
            cnt0++;
        x = x / 2;
    }
    return cnt1 > cnt0;
}

int main()
{
    int N;
    cin >> N;
    int ans = 0;
    for(int i = 1; i <= N; i++)
    {
        if(isGood(i))
        {
            ans++;
        }
    }
    cout << ans << endl;
    return 0;
}
posted @ 2026-10-14 18:54  谢卿妍  阅读(11)  评论(0)    收藏  举报
🚀