day09
1 找素数
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int num) {
//2, 3质数单独做讨论
if(num == 2 || num == 3) return true;
//我们发现5以上的质数均在6两侧,但是注意6两侧的数不一定是质数
if(num % 6 != 1 && num % 6 != 5) return false;
for(int i = 5; i <= sqrt(num); i += 6) {
if(num % i == 0 || num % (i+2) == 0)
return false;
}
return true;
}
int main() {
int i = 2, cnt = 0;
while(true) {
if(isPrime(i)) cnt++;
if(cnt == 100002) {
cout << i << endl;
break;
}
i++;
}
return 0;
}
2 图书排列
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a,b,c,d,e,f,g,h,i,m;
int count=0;
for(a=1;a<11;a++){
for(b=1;b<11;b++){
for(c=1;c<11;c++){
for(d=1;d<11;d++){
for(e=1;e<11;e++){
for(f=1;f<11;f++){
for(g=1;g<11;g++){
for(h=1;h<11;h++){
for(i=1;i<11;i++){
for(m=1;m<11;m++){
if(a+1!=b&&b+1!=c&&c+1!=d&&d+1!=e&&e+1!=f&&f+1!=g&&g+1!=h&&h+1!=i&&i+1!=m&&
a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&&a!=m&&
b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&&b!=m&&
c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&&c!=m&&
d!=e&&d!=f&&d!=g&&d!=h&&d!=i&&d!=m&&
e!=f&&e!=g&&e!=h&&e!=i&&e!=m&&
f!=g&&f!=h&&f!=i&&f!=m&&
g!=h&&g!=i&&g!=m&&
h!=i&&h!=m&&i!=m&&a-1!=b&&b-1!=c&&c-1!=d&&d-1!=e&&e-1!=f&&f-1!=g&&g-1!=h&&h-1!=i&&i-1!=m
){
//printf("%d%d%d%d%d%d%d%d%d%d\n",a,b,c,d,e,f,g,h,i,m);
count++;
}
}
}
}
}
}
}
}
}
}
}
printf("%d",count);
return 0;
}
只会采取暴力求解的方式,没有很好地思绪
day10
1. 剪裁纸
这道题还是很简单滴!
#include <iostream>
using namespace std;
int main()
{
int n, m;
//m表示行,n表示列
scanf("%d%d",&m,&n);
printf("%d",4+(m-1)+((n-1)*m));
return 0;
}
2. 刷题统计
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
long int week = 0;
float day = 0;
long long int n,wek = 0;
int a, b;
scanf("%lld %lld %lld",&a,&b,&n);
//多少周
week = n/(5*a+2*b);
n %= (5*a+2*b);
//n小于一周的题量
if(n > 5*a) day = 5 + ceil(1.0*(n-5*a)/b);
else day = ceil(1.0*n/a);
printf("%lld",week*7 + (int)day);
return 0;
}
day11
1. 卡片
#include <iostream>
using namespace std;
int main()
{
long int i=0;
long int sum = 2021,tmp=0;
long int b=0;
for(i=1; i<20210; i++) {
//记住需要一个数把i的值给记下来,因为后面的相除那一个数是发生变化
tmp=i;
while(tmp) {
b = tmp%10;
if(b==1 && sum>0) {
sum-=1;
}
tmp/=10;
}
if (sum==0) {
break;
}
}
cout<<i;
return 0;
}
因为1是排在最前面的,我们可以想出来1是最先进行消耗完毕的,所以我们只要记录下来1最后用尽的那一数是多少,我们可以使用一个while循环把1消耗进行记录下来,就是递减,出现1就递减1,等于0的时候就是我们需要的那一解
2. 路径
没有思绪,不知道咋写o(╥﹏╥)o
3. 字符统计
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i,j,k;
char s[1000000];
scanf("%s",s);
int a[10000];
for(i=0;s[i]!='\0';i++)
{
a[s[i]-'A']++;
}
k=0;
for(i=0;i<26;i++)
{
if(k<a[i])
{
k=a[i];
}
}
for(i=0;i<26;i++)
{
if(a[i]==k)
{
printf("%c",'A'+i);
}
}
return 0;
}
day12
1. 0的个数
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int k=10,count=0;
while(n%k==0)
{
n=n/k;
count++;
}
cout<<count;
return 0;
}
2. 超级质数
采用暴力求解的手段
#include<iostream>
#include<string>
#include<stdlib.h>
#include<algorithm>
using namespace std;
bool ju2(int x) {
//判断质数
if (x == 1)return 0;
for (int i = 2; i <= x / i; i++) {
if (x % i == 0)
return 0;
}
return 1;
}
bool ju(string s) {
//判断超级质数
for (int i = 1; i <= s.length(); i++) {
for (int j = 0; j <= s.length() - i; j++) {
string sub = s.substr(j, i);
int t = stoi(sub);
if (!ju2(t))return 0;
}
}
return 1;
}
int main() {
for (int i = 1; i < 1000000000; i++) {
string ss = to_string(i);
if (ju(ss))
cout << ss << endl;
}
return 0;
}