9 条题解
-
22
最近学业有点忙碌,UP好久没做题,手都生了,来看看今天的这一道题吧~
- 首先我们用一个函数 two 来做是 A类还是 B类的判断
- 然后一次把 n 取余2,把每次取余的值存储到数组 a 中,这个就是 n 的二进制数啦~
- 然后再用 s 来计算 a 的长度,并且便利 a 数组,用 sum1 来计算 1 的数量,用 sum2 来计算 0 的数量
- 最后做一个判断,如果 1 多的话返回 true 否则返回 false 就可以啦~
最近发现好多人都开始抄我的格式,请不要抄袭谢谢(针对头顶上这位)
最后上代码吧~(UP已经AC过啦~)
#include <bits/stdc++.h> using namespace std; bool two(int n) { int s = 0, num1 = 0, num2 = 0, a[100] = {}; while (n > 0) { a[s] = n % 2; s++; n /= 2; } for (int i = s; i >= 0; i--) { if (a[i] != 1) a[i]--; else break; } for (int i = 0; i <= s; i++) { if (a[i] == 1) num1 += 1; if (a[i] == 0) num2 += 1; } if (num1 > num2) return true; else return false; } int main() { int n; cin >> n; int num1 = 0, num2 = 0; for (int i = 1; i <= n; i++) { if (two(i)) num1 += 1; else num2 += 1; } cout << num1 << " " << num2; return 0; }
-
12
思路(已AC):
定义b:一个数的“0”个数 c: 一个数的“1”个数 t(): 判断1和0谁多 q:所有数的“1”个数 w: 所有数的“0”个数
#include <iostream> using namespace std; int t(int a) //判断 { int b = 0,c = 0; while (a >= 1) //转二进制 { if (a % 2 == 1) { ++b; } else { ++c; } a = a / 2; } if (b > c) // 如果这个二进制数0比1多 { return 1; //报告b > c } else { return 2; //b <= c } } int main() { int s,q = 0,w = 0; cin >> s; for (int i = 1;i <= s;i++) { if (t(i) == 1)//b > c的话 { ++q; } else { ++w; } } cout << q << " " << w; return 0; }
记得点赞呀!做出第一个题解
-
7
全网最短代码来了
#include <bits/stdc++.h> using namespace std; bool panduan(int x) { long long a = 0, b = 0; while (x > 0) { if (x % 2 == 1) a++; else b++; x /= 2; } if (a > b) return 1; else return 0; } int main() { int n; cin >> n; long long v = 0, m = 0; for (int i = 1; i <= n; i++) { if (panduan(i)) v++; else m++; } cout << v << " " << m; return 0; }
-
5
输入n,从1到n循环依次判断 定义一个数组a存储转换成二进制后的0和1,定义k存储0和1的总个数 重复计算这个数对2取模,存到a中,再将这个数除以2,也就是转换成二进制 计算到最后数变成1,退出循环并将1也存进a 然后就得到了转换成二进制的数,遍历一遍判断1多还是0多,就能知道是A类还是B类 统计A类和B类的个数,输出
代码(AC): #include<iostream> using namespace std; int n,na=0,nb=0; int main(){ cin>>n; for(int i=1;i<=n;i++){ int a[10005],k=1; int t=i; while(t!=1){ a[k++]=t%2; t/=2; } a[k]=1; int n1=0,n0=0; for(int i=1;i<=k;i++){ if(a[i]==1) n1++; else n0++; } if(n1>n0) na++; else nb++; } cout<<na<<" "<<nb<<endl; return 0; }
-
5
#include <iostream> using namespace std; int t(int a) { int b = 0,c = 0; while (a >= 1) { if (a % 2 == 1) { ++b; } else { ++c; } a = a / 2; } if (b > c) { return 1; } else { return 2; } } int main() { int s,q = 0,w = 0; cin >> s; for (int i = 1;i <= s;i++) { if (t(i) == 1) { ++q; } else { ++w; } } cout << q << " " << w; return 0; }
-
4
AC代码(本人没学过函数),谢谢!
#include <bits/stdc++.h> using namespace std; int main() { long long a,b=0,c=0,d=0,e=0; cin >> a;//输入 for (long long i=1;i<=a;i++)//遍历1----a { for (long long j=i;j!=0;j/=2)//不断除以2,直到j==0 { if (j%2==1)//判断此位是1还是0 { b++;//统计1 } else { c++;//统计0 } } if (b>c)//判断是A类还是B类 { d++;//统计A类 } else { e++;//统计B类 } b=0; c=0; //恢复出厂设置(don't) } cout << d << ' ' << e;//输出 return 0; }
-
4
题解:先把一个数字转化成二进制,然后统计二级制中1和0的个数,如果1的个数多余0就是A类,反之就是B类。最后统计A类的个数和B类的个数。
二进制转化的代码:
int a[5]={}; int i=0; while(num>=1){ a[i]=num%2; i+=1; num/=2; }
然后是统计1与0的个数之前有一个坑点:
比如1的二进制是0001,题目要求1的二进制是:1,前面0省略,算的是A类,而非B类,
在举例:2的二进制是0010,题目2的二进制是10,前面的0省略。
所以需要先删除1前面无效的0。
while(a[i]!=1){ i--; }
接下里就可以统计1与0的个数,1的个数多就是A类,反之B类。
int x=0,y=0; //x代表1的个数,y代表0的个数。 for(;i>=0;i--){ //遍历二进制判断,1多余0是A类,1的数量<=0的数量是B类。 if(a[i]==1){ x++; }else{ y++; } }
如果X多于y,返回true,就是A类,false是b类。
if(x>y){ return true; }else{ return false; }
最后省略了1-n之间,统计a类b类的过程。
-
2
全网
最短第二短第三短的代码来了~#include <bits/stdc++.h> using namespace std; bool check(int q) { int g0=0,g1=0; while(q>0){if(q%2==0) g0++;else g1++;q=q/2;} if(g1>g0) return true; return false; } int main() { int n; cin >> n; int numA=0,numB=0; for(int i=1;i<=n;i++) { if(check(i)) numA++; else numB++; } cout<<numA<<" "<<numB; return 0; }
-
2
AC代码,放心食用
(
累死我了)
#include <bits/stdc++.h> using namespace std; int a,b; string erjinzhi(int n)//自定义返回字符串的二进制函数 { string r; while (n != 0)//不知道多少次用个while { r += (n % 2 == 0 ? "0" : "1"); n /= 2; } return r;//返回转化完的的二进制字符串 } int main()//美丽的主函数 { int n; string s; cin >> n;//输入n for(int i = 1;i<=n;i++) { int s1=0,s2=0;//每次都要刷新就放循环里了 s = erjinzhi(i);//调用二进制函数 for(int j = 0;j<int(s.length());j++) { if (s[j] == '1') s1++;//"1"有多少个 else s2++;//"0"有多少个 } if(s1>s2) a++;//"1"多,A类 else b++;//"0"多,B类 } cout << a <<" "<< b;//输出 return 0;//结束 }
制作不易,点个赞吧
- 1
信息
- ID
- 141
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 6
- 标签
- 递交数
- 1174
- 已通过
- 656
- 上传者