1073 级数求和
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int k;
cin >> k;
double sum = 0;
int i;
for(i = 1; sum<=k; i ++) {
sum += 1.0/i;
}
cout << i-1 << endl;
return 0;
}
1074 白钱买百鸡
代码(循环就行,加上判断条件)
cpp
#include<bits/stdc++.h>
using namespace std;
int gj, mj, xj;
int main() {
int n;
cin >> n;
int flag = 1;
for(int i = 0; i <= n/5; i ++) {
for(int j = 0; j <= n/3; j ++) {
for(int k = 0; k <= 3*n; k ++) {
if(i*15+j*9+k==3*n && i+j+k==n) {
printf("%4d%4d%4d\n",i,j,k);
flag = 0;
}
}
}
}
if(flag) cout << "No Answer" << endl;
return 0;
}
1075 聚餐人数统计
代码(循环即可)
cpp
#include<bits/stdc++.h>
using namespace std;
int a, b, c;
int main() {
int n,cost;
cin >> n >> cost;
int flag = 1;
for(int i = 0; i <= cost/3; i ++) {
for(int j = 0; j <= cost/2; j ++) {
for(int k = 0; k <= cost; k ++) {
if(3*i+2*j+k == cost && i+j+k == n) {
flag = 0;
cout << i << " " << j << " " << k << endl;
}
}
}
}
if(flag) cout << "No answer" << endl;
return 0;
}
1076 三位数求解
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int x,y,z;
int main() {
int n;
cin >> n;
int flag = 1;
for(int i = 1; i <= 9; i ++) {
for(int j = 1; j <= 9; j ++) {
for(int k = 0; k <= 9; k ++) {
if(i*100+j*10+k + j*100+k*10+k == n) {
flag = 0;
printf("%4d%4d%4d\n",i,j,k);
break;
}
}
}
}
if(flag) cout << "No Answer" << endl;
return 0;
}
1077 字符串加密
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int k;
cin >> k;
string str;
getchar();
getline(cin,str);
for(int i = 0; i < str.size(); i ++) {
if(str[i]>='A'&&str[i]<='Z')
str[i] = 'A' +(str[i]-'A'+k)%26;
else if(str[i]>='a'&&str[i]<='z')
str[i] = 'a' +(str[i]-'a'+k)%26;
cout << str[i];
}
return 0;
}
1078 多实例测试1 a+b
代码
cpp
#include<bits/stdc++.h>
using namespace std;
void solve() {
int a,b;
cin >> a >> b;
cout << a+b << endl;
}
int main() {
int _;
cin >> _;
while(_ --) {
solve();
}
return 0;
}
1079 多实例测试2 a+b
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int a,b;
while(~scanf("%d%d",&a,&b)) {
cout << a+b << endl;
}
return 0;
}
1080 多实例测试3 a+b
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int a,b;
while(cin >> a >> b && (a||b)) {
cout << a+b << endl;
}
return 0;
}
1081 n个数求和(多实例测试)
代码
cpp
#include<bits/stdc++.h>
using namespace std;
void solve() {
int res = 0;
int n; cin >> n;
while(n --) {
int x; cin >> x;
res += x;
}
cout << res << endl;
}
int main() {
int _;
cin >> _;
while(_ --) {
solve();
}
return 0;
}
1082 敲7(多实例测试)
代码
cpp
#include<bits/stdc++.h>
using namespace std;
void solve() {
int n;
cin >> n;
for(int i = 1; i <= n; i ++) {
int flag = 0;
if(i%7==0) flag = 1;
else {
int num = i;
while(num) {
if(num%10==7) flag = 1;
num /= 10;
}
}
if(flag) cout << i <<" ";
}
cout << endl;
}
int main() {
int _;
cin >> _;
while(_ --) {
solve();
}
return 0;
}
1083 数值统计(多实例测试)
代码
注意输入的是n个实数double
cpp
#include<bits/stdc++.h>
using namespace std;
void solve(int n) {
int a, b, c;
a = b = c = 0;
while(n --) {
double x;
cin >> x;
if(x>0) c++;
else if(x<0) a ++;
else b ++;
}
cout << a << " " << b << " " << c << endl;
}
int main() {
// int _;
// cin >> _;
int n;
while(cin >> n && n) {
solve(n);
}
return 0;
}
1084 计算两点间距离(多实例测试)
代码
double类型可以使用pow,写的轻松点
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
// int _;
// cin >> _;
double x1,y1,x2,y2;
while(cin>>x1>>y1>>x2>>y2) {
double res = sqrt(pow(x2-x1,2)+pow(y2-y1,2));
printf("%.2lf\n",res);
}
return 0;
}
1085 求奇数的乘积(多实例测试)
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int _;
while(cin >> _) {
int res = 1;
while(_ --) {
int x; cin >> x;
if(x&1) res *= x;
}
cout << res << endl;
}
return 0;
}
1086 ASCII 码排序(多实例用例)
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
char a, b, c;
while(cin >> a >> b >> c) {
if(a>b) swap(a,b);
if(a>c) swap(a,c);
if(b>c) swap(b,c);
cout << a << " " << b << " " << c << endl;
}
return 0;
}
1087 获取出生日期(多实例用例)
代码
%*6d 屏蔽6个整数输入 %4d 输入四个整数, %02d, 输出时,不够两位整数,前面补0
cpp
#include<bits/stdc++.h>
using namespace std;
void solve() {
int year,month,day;
scanf("%*6d%4d%2d%2d%*4d",&year,&month,&day);
printf("%4d-%02d-%02d\n",year,month,day);
}
int main() {
int _;
cin >> _;
while(_ --) {
solve();
}
return 0;
}
1088 手机短号(多实例)
代码
%*6d%5d,输入十一位的整数,屏蔽前六位,获取后五位,但可能有前缀00123 这样算是整数123
输出时,需要将获取的前面补0,%05d;
cpp
#include<bits/stdc++.h>
using namespace std;
void solve() {
int a;
scanf("%*6d%5d",&a);
printf("6%05d\n",a);
}
int main() {
int _;
cin >> _;
while(_ --) {
solve();
}
return 0;
}
1089 阶乘的最高位
代码
1000*999 = 999000 *998 = 99700200
1*999 = 9.99*998 = 9.9700200
最高位只与前面位数的乘积有关,保留double类型的个位数即可,因为要的也是最高位,保留个位数刚好
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
double res = 1;
while(n) {
res *= n;
while(res>=10) res/=10;
n --;
}
cout << (int)res << endl;
return 0;
}
1090 整数幂
代码
cpp
#include<bits/stdc++.h>
using namespace std;
void solve() {
int a, b;
cin >> a >> b;
int res = 1;
for(int i = 0; i < b; i ++) {
res *= a;
res %= 1000; // 只要最低三位,其他不影响
}
cout << res << endl;
}
int main() {
int _;
cin >> _;
while(_--) {
solve();
}
return 0;
}
代码2
采用高精度乘低精度的模拟思想,截取最底位的三位数。
cpp
#include<bits/stdc++.h>
using namespace std;
void solve() {
int a; int b;
cin >> a >> b;
// a最低位后三位入vector
string _a = to_string(a);
vector<int> A(3,0);
for(int i = 0; i < 3 && _a.size(); i ++) {
A[i] = _a.back()-'0'; _a.pop_back();
}
int t = 0;
for(int i = 0; i < b-1; i ++) {
t = 0;
for(int j = 0; j < 3; j ++) {
t += A[j]*a;
A[j] = t%10;
t /= 10;
}
}
while(A.size()>1 && A.back()==0) A.pop_back();
vector<int> B(A.rbegin(),A.rend());
for(auto x : B) cout << x;
puts("");
}
int main() {
int _;
cin >> _;
while(_ --) {
solve();
}
return 0;
}
1091 童年生活二三事(多实例测试)
代码(递归)
将问题分解乘若干小问题, 第一种n == 1, 跳1, 第二种 n == 2 ,跳一个2或2个1.
当n >= 3 : 跳1 或跳2 , 其实都是跳1的数+跳2的数
递归可以改进成记忆化搜索,下文我记的其他笔记链接
弄一个数组,记录递推过程的值,因为多实例测试,可以重复利用,有值的可以直接推出递归,返回数组值即可。
cpp
#include<bits/stdc++.h>
using namespace std;
int f(int n) {
if(n == 1 || n == 2) return n;
return f(n-1) + f(n-2);
}
int main() {
int n;
while(cin >> n && n) {
cout << f(n) << endl;
}
return 0;
}
代码2(dp数组递推写法)
cpp
#include<bits/stdc++.h>
using namespace std;
int dp[50]; //前面算的值都是有存储下来的
//由前往后递推
int main() {
int n;
dp[1] = 1, dp[2] = 2;
while(cin >> n && n) {
for(int i = 3; i <= n; i ++) {
if(dp[i]) continue; // 有值跳过本次
dp[i] = dp[i-1] + dp[i-2];
}
cout << dp[n] << endl;
}
return 0;
}
代码3(非递归写法)变量滚动模拟模拟递推
cpp
#include<bits/stdc++.h>
using namespace std;
int f(int n) {
if(n == 1) return 1;
if(n == 2) return 2;
int a = 1, b = 2;
int c;
for(int i = 3; i <= n; i ++) {
c = a + b;
a = b, b = c;
}
return c;
}
int main() {
int n;
while(cin >> n && n) {
cout << f(n) << endl;
}
return 0;
}
分析:类似于斐波那契,下面笔记有多种解法
1092 素数表(函数专题)
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int prime(int n) {
if(n==1) return 0;
for(int i = 2; i*i<=n; i ++) {
if(!(n%i)) return 0;
}
return 1;
}
int main() {
int m, n;
cin >> m >> n;
for(int i = m; i <= n; i ++) {
if(prime(i)) cout<< i << " ";
}
return 0;
}
代码2(离散化对素数排位)
扩思路,不适用于此题
1093 验证哥德巴赫猜想(函数专题)
代码
cpp
#include<bits/stdc++.h>
using namespace std;
bool prime(int n) {
if(n == 1) return false;
for(int i = 2; i*i <= n; i ++) {
if(!(n%i)) return false;
}
return true;
}
int main() {
int m;
cin >> m;
for(int i = 2; i <= m/2; i ++) { //搜索前一半就够了 前面跟后面对应
if(prime(i)) {
if(prime(m-i))
cout << i << " " << m-i << endl;
}
}
return 0;
}
1094 统计元音(函数专题)
代码
核心操作是比较
cpp
#include<bits/stdc++.h>
using namespace std;
int vowel(char *ch) {
int res = 0;
for(int i = 0; i < strlen(ch); i ++) {
if(ch[i]=='a'|| ch[i]=='e'||ch[i]=='o'||ch[i]=='i'||ch[i]=='u') res++;
if(ch[i]=='A'|| ch[i]=='E'||ch[i]=='O'||ch[i]=='I'||ch[i]=='U') res++;
}
return res;
}
int main() {
char ch[1010];
gets(ch);
cout << vowel(ch) << endl;
return 0;
}
1095 时间间隔(多样例测试)
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int HmsToS(int h, int m, int s) {
return h*3600+m*60+s;
}
void PrintTime(int s) {
int h, m;
h = s/60/60; m = s/60%60; s = s%60;
printf("%02d:%02d:%02d\n",h,m,s);
}
int main() {
int h1, m1, s1;
int h2, m2, s2;
while(~scanf("%d:%d:%d%d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2)) {
int t_s1 = HmsToS(h1,m1,s1);
int t_s2 = HmsToS(h2,m2,s2);
int t_s = t_s2 - t_s1;
PrintTime(t_s);
}
return 0;
}
1096 水仙花数(函数专题 多实例)
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int sum(int n) {
int res = 0;
while(n) {
res += (n%10)*(n%10)*(n%10);
n /= 10;
}
return res;
}
int main() {
int m, n;
while(cin >> m >> n) {
int flag = 1;
for(int i = m; i <= n; i ++) {
if(i == sum(i)) {
flag = 0;
cout << i << " ";
}
}
if(flag) puts("no");
else puts("");
}
}
1097 计算平均成绩(函数专题)
代码(unordered_map)
使用,if语句,或者switch(ch) 也可以,记得 要double型来除以就行
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
unordered_map<char,int> a;
a = {{'A',95},{'B',85},{'C',75},{'D',65},{'E',40}};
char ch[100];
cin >> ch+1;
int sum = 0;
//cout << ch+1 << endl;
//cout << strlen(ch) << endl;
for(int i = 1; i <= strlen(ch); i ++) {
sum += a[ch[i]];
}
double res = 1.0*sum/(strlen(ch)-1); // 转double 1.0*sum
printf("%.1lf\n",res);
return 0;
}
1098 复合函数求值(函数专题)
代码(绝对值函数fabs (double) )
cpp
#include<bits/stdc++.h>
using namespace std;
double funF(double x) {
return fabs(x-3) + fabs(x+1);
}
double funG(double x) {
return x*x-3*x;
}
int main() {
double x;
cin >> x;
printf("%.2lf\n",funF(funG(x)));
return 0;
}
1099 角谷猜想(多实例测试)
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
while(cin >> n) {
int cnt = 0;
while(n!=1) {
if(n&1) {
n = n*3+1;
cnt ++;
}
n >>= 1; cnt ++;
}
cout << cnt << endl;
}
}
代码2(递归)
cpp
#include<bits/stdc++.h>
using namespace std;
int dfs(int n) {
if(n == 1) return 0;
if(n&1) return dfs(n*3+1)+1;
else return dfs(n/2)+1;
}
int main() {
int n;
while(cin >> n) {
cout <<dfs(n)<<endl;
}
return 0;
}