#include<stdio.h> #include<string.h> int main() { int arr[100]; int i = 0; while (1) { scanf("%d", &arr[i]); ++i; if (getchar() == '\n') break; } int target = 0; scanf("%d", &target); int left = 0; int right = i - 1; while (left < right) { if (arr[left] + arr[right] == target) { printf("%d %d", arr[left], arr[right]); break; } else if (arr[left] + arr[right] > target) --right; else ++left; } return 0; }算法思路
时间: 2024-04-03 10:31:23 浏览: 37
这是一个利用双指针法寻找数组中两个数之和等于给定值的算法。首先,利用循环和getchar()函数读取用户输入的一组整数存入数组中,直到输入回车符结束输入。然后,再读取用户输入的目标值。接着,定义两个指针left和right,分别指向数组的开头和结尾。在while循环中,若left和right指向的元素之和等于目标值,则输出这两个元素并结束循环;若left和right指向的元素之和大于目标值,则将right指针左移;若left和right指向的元素之和小于目标值,则将left指针右移。最终,若找不到符合要求的数对,则算法结束。
相关问题
#include<stdio.h> #include<string.h> struct student{ char name[100]; int age; }; int main(void) { int i,j; struct student arr[5]; for(i=0;i<5;i++) { scanf("%s%d",arr[i].name,&arr[i].age); } for(i=0;i<4;i++) {
在代码中,最后一个for循环没有结束,缺少右括号。下面是修改后的代码:
```
#include<stdio.h>
#include<string.h>
struct student{
char name[100];
int age;
};
int main(void) {
int i,j;
struct student arr[5];
for(i=0;i<5;i++) {
scanf("%s%d",arr[i].name,&arr[i].age);
}
for(i=0;i<4;i++) {
for(j=0;j<4-i;j++) {
if(arr[j].age>arr[j+1].age) {
struct student t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
for(i=0;i<5;i++) {
printf("%s %d\n",arr[i].name,arr[i].age);
}
return 0; //需要加上返回值
} //需要加上右括号
#include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>int main(){ char arr1[] = {"i hate you, i love you"}; char arr2[] = {"######################"}; int left = 0; int right = strlen(arr1) - 1;//int right = sizeof(arr1) / sizeof(arr1[0]) - 2; while (left <= right) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf("%s\n", arr2); Sleep(1000); system("cls"); left++; right--; } printf("%s\n", arr1); return 0;}
这段代码使用C语言编写,它的功能是将字符串"i hate you, i love you"逐渐从两端向中间替换为"#"字符,并在每次替换后输出替换后的结果,然后清空屏幕。最后输出原始字符串。
代码中包含了以下头文件:
```c
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
```
主函数`main()`中的代码逻辑如下:
1. 定义了两个字符数组`arr1`和`arr2`,分别用于存储原始字符串和替换后的字符串。
2. 初始化左右边界指针`left`和`right`,分别指向字符串的开头和结尾。
3. 使用循环来逐渐替换字符串的字符,每次替换后输出替换后的结果并清空屏幕。
4. 循环结束后,输出原始字符串`arr1`。
5. 返回0,表示程序正常运行结束。
请注意,这段代码使用了Windows系统特定的头文件`windows.h`和函数`Sleep()`、`system("cls")`,在其他操作系统上可能需要进行相应的修改才能正常运行。
阅读全文