C语言 OJ ...奇偶数分离

这是一篇关于使用C语言解决奇偶数分离问题的博客,介绍了如何在限定的时间和内存限制下,对输入的一串数字进行奇偶数的分类。题目描述包括输入输出格式,并给出了样例输入和输出数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题 B: 奇偶数分离

时间限制: 3 Sec   内存限制: 128 MB
提交: 332   解决: 119
[ 提交][ 状态][ 讨论版][命题人: uzzoj]

题目描述

有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。

输入

第一行有一个整数i(2<=i<30)表示有 i 组测试数据;
每组有一个整型偶数n。

输出

第一行输出所有的奇数
第二行输出所有的偶数

样例输入

2
10
14

样例输出

1 3 5 7 9 
2 4 6 8 10 

1 3 5 7 9 11 13 
2 4 6 8 10 12 14 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
     int n,i,j;
     scanf ( "%d" ,&n);
     int a[n];
     for (i=0;i<n;i++)
     {
         scanf ( "%d" ,&a[i]);
     }
     for (i=0;i<n;i++)
     {
         for (j=1;j<=a[i];j++)
         {
             if (j%2!=0){ printf ( "%d " ,j);}
         }
         printf ( "\n" );
         for (j=1;j<=a[i];j++)
         {
             if (j%2==0){ printf ( "%d " ,j);}
         }
printf ( "\n" );
printf ( "\n" );
  }
 
 
     return 0;
}
 


### ZZULIOJ 1126 布尔矩阵奇偶性解题思路 对于给定的一个n阶布尔方阵,要判断其是否具有奇偶均势特性,即每行、每列总和为偶数[^3]。如果该矩阵不满足此条件,则进一步检查能否通过改变其中一个元素(0变为1或1变为0),使得整个矩阵达到奇偶均势。 #### 判断原始矩阵是否符合条件 遍历整个矩阵计算各行各列的1的数量,并记录下这些数量中为奇数的情况。若所有行列都含有偶数个1,则直接输出“OK”。 #### 尝试修正一次错误的可能性 当发现存在某一行或某一列为奇数时,考虑是否存在唯一的位置可以调整从而让所有的行与列都能变成偶数之和。具体做法如下: - 统计有多少行以及多少列出现了奇数次的1; - 如果恰好只有一个位置能够同时影响到两个方向上由奇转偶,则说明可以通过更改这一个位来修复矩阵; - 输出需要变更的具体坐标`bit(i, j)`,其中i表示第几行,j表示第几列,注意这里的索引是从0开始编号的。 #### 处理无法修复的情形 经过上述两步处理之后仍然未能得到满意的结果,则表明当前输入数据已经损坏严重,无法简单地通过单点变换恢复成合法状态,此时应返回字符串“Corrupt”。 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; bool matrix[n][n]; int rowSum[n], colSum[n]; // 初始化rowSum 和 colSum 数组 for(int i = 0; i < n; ++i){ rowSum[i]=colSum[i]=0; } // 输入矩阵的同时统计各行各列中的'1' for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ cin>>matrix[i][j]; rowSum[i]+=matrix[i][j]; colSum[j]+=matrix[i][j]; } } int oddRow=-1,oddCol=-1,rowCount=0,colCount=0; // 记录哪些行/列有奇数个‘1’及其总数目 for(int i=0;i<n;++i){ if(rowSum[i]%2!=0){ rowCount++; oddRow=i;} if(colSum[i]%2!=0){ colCount++; oddCol=i;} } // 根据不同情况给出相应结果 if((rowCount==0)&&(colCount==0)){ cout<<"OK"; }else if ((rowCount<=1)&&(colCount<=1)){ cout << "Change bit("<<oddRow<<","<<oddCol<<")"; } else{ cout <<"Corrupt"; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值