c语言用for循环找数组里面只出现一次的元素,其余元素都出现两次
时间: 2023-05-30 07:02:24 浏览: 51
可以使用异或运算来解决这个问题。
思路:
- 定义一个变量result,初始值为0。
- 遍历数组,对于数组中的每个元素,用result与这个元素进行异或运算。
- 最后result中的值就是只出现一次的元素。
代码实现:
```c
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5, 1, 2, 3, 4};
int len = sizeof(arr) / sizeof(int);
int result = 0;
for (int i = 0; i < len; i++) {
result ^= arr[i];
}
printf("The element only appears once is: %d\n", result);
return 0;
}
```
输出:
```
The element only appears once is: 5
```
相关问题
c语言中数组循环右移n次一个循环实现
下面是一个循环实现C语言中数组循环右移n次的示例代码:
```c
#include <stdio.h>
void rotate(int arr[], int n, int k){
while (k-- > 0){
int tmp = arr[n-1];
for (int i=n-1; i>0; i--){
arr[i] = arr[i-1];
}
arr[0] = tmp;
}
}
int main(){
int arr[] = {1,2,3,4,5};
int n = sizeof(arr)/sizeof(arr[0]);
int k = 2;
printf("Original array: ");
for (int i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n");
rotate(arr, n, k);
printf("Rotated array: ");
for (int i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在上面的代码中,rotate()函数接收一个整型数组、数组长度n和右移次数k作为参数。在每次循环中,将最后一个元素保存到tmp变量中,然后将除了第一个元素之外的所有元素向右移动一个位置。最后,将tmp赋值给第一个元素,完成一次循环右移。通过循环k次,可以实现n次循环右移。
在主函数中,我们定义了一个长度为5的整型数组arr,并将其初始化为{1,2,3,4,5}。我们将k设为2,表示要将数组循环右移两次。然后,使用rotate()函数对数组进行循环右移,并输出原始数组和循环右移后的数组。最终输出结果如下:
```
Original array: 1 2 3 4 5
Rotated array: 4 5 1 2 3
```
c语言二维数组求最大两个元素
可以使用双重循环遍历二维数组,找到最大的两个元素。具体的实现方式如下所示:
```c
#include <stdio.h>
int main() {
int arr[3][3] = {{1, 5, 3}, {8, 4, 2}, {7, 9, 6}};
int max1 = arr[0][0], max2 = arr[0][1];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (arr[i][j] > max1) {
max2 = max1;
max1 = arr[i][j];
} else if (arr[i][j] > max2 && arr[i][j] != max1) {
max2 = arr[i][j];
}
}
}
printf("The first maximum element is %d\n", max1);
printf("The second maximum element is %d\n", max2);
return 0;
}
```
这段代码中,我们使用了两个变量 `max1` 和 `max2` 分别存储当前已经找到的最大元素和次大元素。在双重循环中,我们遍历二维数组中的每个元素,如果当前元素比 `max1` 大,则将 `max2` 更新为 `max1`,再将 `max1` 更新为当前元素。如果当前元素比 `max2` 大但不等于 `max1`,则将 `max2` 更新为当前元素。最终输出 `max1` 和 `max2` 即可。