刷别的学校oj—河工大oj1073-1099

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;
}

分析:类似于斐波那契,下面笔记有多种解法

斐波那契数列-acwing-CSDN博客

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(离散化对素数排位)

扩思路,不适用于此题

离散化对素数排位-CSDN博客

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;
}
相关推荐
trueEve23 分钟前
SQL,力扣题目1126,查询活跃业务
算法·leetcode·职场和发展
别开生面的阿杰27 分钟前
蓝桥杯-洛谷刷题-day3(C++)
c++·算法·蓝桥杯
Mr.W.T44 分钟前
JVM垃圾回收详解(重点)
java·jvm·算法
___Dream1 小时前
算法闭关修炼百题计划(八)
算法
MATLAB滤波1 小时前
MATLAB中的绘图技巧
开发语言·matlab
致宏Rex2 小时前
Rust 入门指南(零):安装及 Cargo 管理器
开发语言·rust
伏虎山真人2 小时前
R门 - rust第一课陈天 -内存知识学习笔记
开发语言·r语言
好开心332 小时前
javaScript交互补充(元素的三大系列)
开发语言·前端·javascript·ecmascript
浮生如梦_2 小时前
Halcon 3D平面度
图像处理·算法·计算机视觉·平面·视觉检测