今天是刷题第9天,放弃不难,但坚持一定很酷~
快来跟我一起刷题吧。
加油,一起努力进步
输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)
输入一个整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
示例1
输入:180
输出:2 2 3 3 5
先普及一下什么叫做质因子
#include
void printPrimeFactors(int n) {
// 从 2 开始尝试除数
for (int i = 2; i <= n; i++) {
// 当 i 是 n 的因子时,不断输出 i,并更新 n 为 n/i
while (n % i == 0) {
printf("%d ", i);
n /= i;
}
}
}
int main() {
int number;
// 从用户输入获取正整数
printf("请输入一个正整数:");
scanf("%d", &number);
// 输出质因子
printf("质因子:");
printPrimeFactors(number);
return 0;
}
方法一:除以10求余,得到每一位数字,放入数组之前与数组中已存在的数据对比,不重复的数据才能存入数组
#include
#include
int main()
{
int num=0,size=0,flag=1;
char str[10000]={0},ch;
scanf("%d",&num);
for(;num%10 != 0;num=num/10)//外for循环逆序读取每一位数字
{
flag=1;
ch = num%10 + '0';//整型->字符
for(int j=0;j<=size;j++)//内for循环将每一位数字和数组中的比较
if(str[j]==ch)
{
flag=0;//数字重复标志
break;
}
if(flag)
{
str[size++]=ch;//数组大小size动态增加
}
}
printf("%s",str);
return 0;
}
方法二:首先循环提取输入数的最低位,维护一个大小为10的数组,判断数组中是否有提取的这个数位。
#include
int main()
{
int num = 0,result=0;
int arr[10] = {0};
scanf("%d",&num);
while(num != 0)
{
if(arr[num%10]==0)
{
arr[num%10]=1;
result=result*10+(num%10);
}
num=num / 10;
}
printf("%d\n",result);
}
方法一:取余求解
#include
int main()
{
int input = 0;
int count = 0;
scanf("%d", &input);
while (input)
{
if (input % 2 == 1)
{
count++;
}
input /= 2;
}
printf("%d\n", count);
return 0;
}
方法二:位运算
#include
int main()
{
int input = 0;
scanf("%d", &input);
int count = 0;
while (input)
{
input &= (input - 1);
count++;
}
printf("%d\n", count);
return 0;
}
& : 按位与:转化为2进制后相同位置数有0则为0
| : 按位或:转化为2进制后相同位置数有1则为1
^ : 按位异或 :转化为2进制后相同位置相同则为0相异则为1
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
分析:猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。这就意味着先将桃子数减去1,然后再拿走五分之一数量的桃子,只剩下五分之四的桃子,并且下一次分桃又重复着这种操作,总共进行了5次。自然而然的想到使用循环解决。
#include
int main ()
{
int monkey = 1;
int peach = 1;
int count = 1;
while (monkey <= 5)
{
if (peach % 5 == 1)
{
peach = (peach / 5) * 4;
monkey++;
}
else
{
count++;
peach = count;
monkey = 1;
}
}
printf("桃的最小总数为:%d", count);
}
中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?翻译成人话就是:
公鸡5元一只;母鸡3元一只;雏鸡一元3只。百钱买百鸡,问鸡翁、母、雏各几只?
分析:这题共有三个限制条件,3 种鸡的钱数总和为 100。 3 种鸡的数量之和为 100小鸡数必须是 3 的倍数
使用循环,满足三种情况的全部枚举出来就好了。
#include
int main()
{
int a,b,c;
for (a=0;a<=20;a++)
{
for(b=0;b<=33;b++)
{
c=(100-5*a-3*b)*3;
if(a+b+c==100)
printf("公鸡是%d只,母鸡是%d只,雏鸡是%d只.\n",a,b,c);
}
}
}