A比大小
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long a, b, n, i;
scanf("%lld",&n);
for(i = 0;i < n;i ++){
while (scanf("%lld%lld", &a, &b) == 2) {
if(n==100)
break;
else
if (abs(a) >= abs(b)) {
printf("Yes\n");
}
else {
printf("No\n");
}
}
}
return 0;
}
C数字序列
#include <stdio.h>
int main() {
int f(int n),n,count=0;
scanf("%d", &n);
while(n>1){
if (n % 2 == 1) {
return f(3 * n + 1) + 1;
}
else {
return f(n / 2) + 1;
}
count++;
}
printf("%d\n",count);
return 0;
}
求符合要求的正确代码以及正确运行出题目里输入输出例子的截图
以下是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long a, b, n, i;
scanf("%lld", &n);
for (i = 0; i < n; i++) {
scanf("%lld%lld", &a, &b); // 放到for循环内部,每次读入一组数据
if (llabs(a) >= llabs(b)) { // 使用llabs计算绝对值
printf("Yes\n");
}
else {
printf("No\n");
}
}
return 0;
}
修正了以下问题:
A比大小 第一个数输入多余吧?把第7行scanf("%lld",&n);
注释掉就行:
-123
123
Yes
-123
234
No
C数字序列,应该是f(3)=7
int f(int n) {
int count = 0;
// 如果n为奇数,则n变为3n+1,否则变为n/2,直到n变为1
while (n > 1) {
if (n % 2 == 1) {
n = 3 * n + 1;
}
else {
n /= 2;
}
count++;
}
return count;
}
输入3,循环如下:
1: 3n+1=10
2: n/2=5
3: 3n+1=16
4: n/2=8
5: n/2=4
6: n/2=2
7: n/2=1
但是这个题的输入输出没对上,不知是什么逻辑
#include <stdio.h>
#include <math.h>
int main()
{
int sz[200];
int i = 0;
do {
scanf_s("%d",&sz[i]);
i++;
scanf_s("%d", &sz[i]);
i++;
} while (getchar()=='\n'&&getchar()!='\n');
for (int a = 0; a <i; a=a+2)
{
if (abs(sz[a]) >= abs(sz[a + 1]))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
}
1.
根据题目要求,我们需要在 C 语言中实现比大小,且不能使用高精度类。以下是修改后的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(char *a, char *b) {
int lena = strlen(a), lenb = strlen(b);
if (lena != lenb) {
return lena > lenb ? 1 : -1;
}
for (int i = 0; i < lena; i++) {
if (a[i] != b[i]) {
return a[i] > b[i] ? 1 : -1;
}
}
return 0;
}
int main() {
int n;
char a[1005], b[1005];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s%s", a, b);
int cmp = compare(a, b);
if (cmp >= 0) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}
以上程序中,我们通过自己实现一个比较函数 compare 来比较两个数的大小,避免使用高精度类。需要注意的是,由于题目中输入的数可能为负数,因此在比较两个数大小时需要先判断它们的符号,然后再比较它们的绝对值大小。具体来说,我们可以先比较两个数的位数,如果位数不同,则位数多的数更大;如果位数相同,则从高位到低位逐位比较,直到找到不同的位为止。如果找到了不同的位,则比较它们的大小,如果两个数相等,则继续比较下一位,直到比较完所有位。最后,根据比较结果输出 Yes 或 No。
2.
以下是修改后的程序,主要是修复了递归调用时没有将结果返回的问题,并且在最后输出 count 的位置做了调整:
#include <stdio.h>
int f(int n) {
if (n == 1) {
return 1;
}
if (n % 2 == 1) {
return f(3 * n + 1) + 1;
} else {
return f(n / 2) + 1;
}
}
int main() {
int a, b, i, max_len = 0;
while (scanf("%d%d", &a, &b) != EOF) {
if (a > b) {
// 交换 a 和 b
int temp = a;
a = b;
b = temp;
}
max_len = 0;
for (i = a; i <= b; i++) {
int len = f(i);
if (len > max_len) {
max_len = len;
}
}
printf("%d\n", max_len);
}
return 0;
}
修改后的程序正常运行时,可以按以下方式输入和输出数据:
输入:
101 110
1 10
输出:
119
20
int f(int n) {
int count = 0;
// 如果n为奇数,则n变为3n+1,否则变为n/2,直到n变为1
while (n > 1) {
if (n % 2 == 1) {
n = 3 * n + 1;
}
else {
n /= 2;
}
count++;
}
return count;
}
```c
```
解答参考
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long a[100], b[100], n=0, i=0,flag=0;
printf("please enter n ");
//scanf("%lld",&n);
do
{
flag=scanf("%lld%lld", &a[n], &b[n]);
printf("the flag =%d\n", flag);
if(flag==2)
{
n++;
if(n==100)
{
flag=0;
}
}
} while (flag!=0);
for(i = 0;i < n;i ++)
{
if (abs(a[i]) >= abs(b[i]))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
第二题
#include <stdio.h>
int fun(int n);
int count=0;
int main()
{
int a,b;
int a1,b1;
scanf("%d%d", &a,&b);
count=0;
fun(a);
a1=count;
count=0;
fun(b);
b1=count;
if(a1>b1)
printf("%d\n",a1);
else
printf("%d\n",b1);
return 0;
}
int fun(int n)
{
if(n==1)
{
count+=1;
return 1;
}
else
{
if(n%2 == 1)
{
count+=1;
return fun(3*n+1);
}
else
{
count+=1;
return fun(n / 2);
}
}
}
#include<stdio.h>
int main()
{
char a;
scanf("%c",&a);
while(a!='\n')//按回车时退出
{
if(a=='a')
a='*';
printf("%c",a);
scanf("%c",&a);//重新输入
}
return 0;
}
两个题目的程序如下所示,第二个题目的10,1的结果应该是有问题的。
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long a[100], b[100], n=0, i=0,flag=0;
printf("please enter n ");
//scanf("%lld",&n);
do
{
flag=scanf("%lld%lld", &a[n], &b[n]);
printf("the flag =%d\n", flag);
if(flag==2)
{
n++;
if(n==100)
{
flag=0;
}
}
} while (flag!=0);
for(i = 0;i < n;i ++)
{
if (abs(a[i]) >= abs(b[i]))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
```c
第二题
```c
#include <stdio.h>
int fun(int n);
int count=0;
int main()
{
int a,b;
int a1,b1;
scanf("%d%d", &a,&b);
count=0;
fun(a);
a1=count;
count=0;
fun(b);
b1=count;
if(a1>b1)
printf("%d\n",a1);
else
printf("%d\n",b1);
return 0;
}
int fun(int n)
{
if(n==1)
{
count+=1;
return 1;
}
else
{
if(n%2 == 1)
{
count+=1;
return fun(3*n+1);
}
else
{
count+=1;
return fun(n / 2);
}
}
}