携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
题目描述
思路
首先对于给定的一个数,要判断它的奇偶性。假设这个数是n,用count记录步数 1.偶数,n/=2;count++ 2.奇数,(3*n+1)/2赋给n,count++; 循环一直到n为1.最后输出.
代码实现
int f(int n)
{
int count = 0;
while (n!=1)//是否为1
{
if (n % 2 == 0)//偶
{
n /= 2;
count++;
}
else//奇
{
n = (3 * n + 1) / 2;
count++;
}
}
return count;//步数
}
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", f(n));
return 0;
}
题目描述
思路
在审题中我们发现,这个整数可以特别大,用
int的类型根本无法存下,这个我们用数字字符进行储存。 1用'1'-'0' 进行运算。 用循环的方式把所有位上的数字进行求和sum,结束标准位\0. sum%10得到各个位数存在一个数组中,用n进行标记sum位数,也是数组的下标 我们可以枚举拼音数字。
代码实现
#include <stdio.h>
int main()
{
//创建字符数组
char arr[100];
//整数数组储存和的每个位数
int brr[100]={0};
//创建和
int sum = 0,i=0,n=0;
//创建拼音数字数组
char* pin[10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
//输入整数
scanf("%s", arr);
//计算各个位数之和
while (arr[i])
{
sum += arr[i] - '0';
i++;
}
//储存sum的各个位数,同时用n进行标记
//从个位数进行储存的
while (sum)
{
brr[n] = sum % 10;
sum /= 10;
n++;
}
//输出
while (n)
{
printf("%s", pin[brr[n-1]]);
n--;
if (n)//保证最后一个不打印空格
printf(" ");
}
return 0;
}
题目描述
解题思路
第一步:查找字符串中除PAT之外的字符,如果存在就NO,在查找的过程中,PT只出现1一次,A至少存在一次,如果不满足NO 第二步:
经分析,如果要YES,我们可以得到,1.c是a的倍数(c,a不为0时),最终得到a,c相等且b=1的状态。2.a,c都为0时,b的值随便(在上一步时判断了,b肯定不为0)。除此之外都是NO。
==代码有解释==
代码实现
#include <stdio.h>
int main()
{
int n,a,b,c;
scanf("%d", &n);
char arr[10][100];
int i = 0;
for (i=0;i<n;i++)
{
scanf("%s", arr[i]);
}
i = 0;
//统计P,T前a,中b,后c中A的个数
while (i<n)
{
a = 0; b = 0; c = 0;
char* temp = (char*)arr[i];
//第一步开始进行判断
while (*temp)
{
if (*temp == 'A')
a++;
else if (*temp == 'P')
b++;
else if (*temp == 'T')
c++;
else//不是这3个字符时跳出
break;
temp++;
}
//下面排除多P多T没有A的情况
if (b!=1||c!=1||a==0)
{
printf("NO\n");
i++;
}
//除PAT之外的字符
else if (*temp!='\0')
{
printf("NO\n");
i++;
}
//只含PAT的字符
else
{
a = 0; b = 0; c = 0;
temp = (char*)arr[i];
//P前面的A的个数
while (*temp++ != 'P'&& *temp)
{
a++;
}
//P与T之间的A的个数
while (*temp++ != 'T' && *temp)
{
b++;
}
//T之后的A的个数
while (*temp)
{
c++;
temp++;
}
//变成aPbTc,其中a与c相等
while (c)
{
if (a && c && c != a && c % a == 0)
{
c = c - a;
b--;
}
else
break;
}
if (b == 1&& c == a)//满足aPbTc的形式
printf("YES\n");
else if (a == 0&& c == a)//满足PbT的形式
printf("YES\n");
else//错误形式
printf("NO\n");
i++;
}
}
return 0;
}