日常训练代码记录

日常训练代码记录
JK学长想对整数的数字求和来找到正整数的数字根。整数根的定义如下:如果结果值是单个数字,则该数字是数字根。如果结果值包含两个或更多个数字,则对这些数字求和并重复该过程。只要需要获得一位数,这就会继续。

例如,考虑正整数24.加上2和4得到值6.由于6是单个数字,6是24的数字根。现在考虑正整数39.加上3和9的收益率12.由于12不是一个数字,因此必须重复该过程。添加1和2 yeilds 3,单个数字以及39的数字根。
Input
输入文件将包含一个正整数列表,每行一个。输入的结尾将由整数值零表示。每次输入的数据不超过10^1000。
Output
对于输入中的每个整数,在输出的单独行上输出其数字根。.
Sample Input
24
39
0
Sample Output
6
3

#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
char s[1010];
int fun(char s[1010]) {
	ll sum=0;
	for(int i=0; s[i]!='\0'; i++) {
		sum+=(s[i]-'0');
	}
	if(sum>=10) {
		sprintf(s,"%ld",sum);
		fun(s);
	} else printf("%ld\n",sum);
}
int main() {
	scanf("%s",s);
	while(s[0]!='0') {
		fun(s);
		scanf("%s",s);
	}
	return 0;
}
/*测试样例
24
39
0
*/

给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
Sample Input
5 3
3 -35 92 213 -644
Sample Output
213 92 3

Hint
请用VC/VC++提交

#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
int d=500000;
int temp[1000100];
int main() {
	int n,m,t;
	while(~scanf("%d%d",&n,&m)) {
		memset(temp,0,sizeof(temp));
		for(int i=0; i<n; i++) {
			scanf("%d",&t);
			temp[t+d]=1;
		}
		for(int i=1000000; i>=0; i--) {
			if(temp[i]) {
				if(m>1) {
					printf("%d ",i-d);
					m--;
				} else {
					printf("%d\n",i-d);
					break;
				}
			}
		}
	}
	return 0;
}
/*测试样例1
5 3
3 -35 92 213 -644
*

一个正整数n,如果是奇数n=3*n+1 偶数n=n/2,直到n=1,停止执行;执行的次数是T;
求在区间[i,j]中T的最大值。
比如n=22 执行的过程为 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 总共执行了16次即T=16;
当i=4,j=6时 T(4)=3,T(5)=6,T(6)=9;所以最大值T是9.
Input

输入为多组输入,输入两个整数i,j;保证输入的数大于0小于10^6;
You can assume that no opperation overflows a 32-bit integer.
Output
每行输出三个数
i,j,T。
Sample Input
10 1
4 6
201 210
900 1000
Sample Output
10 1 20
4 6 9
201 210 89
900 1000 174

#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
int fun(int n) {
	int num=1;
	if(n==0)
		num=0;
	while(n>1) {
		if(n%2==0)
			n/=2;
		else
			n=n*3+1;
		num++;
	}
	return num;
}
int main() {
	int i,j;
	while(~scanf("%d%d",&i,&j)) {
		int max=0,k,flag=0;
		if(i>j) {
			int t=i;
			i=j;
			j=t;
			flag=1;
		}
		for(k=i; k<=j; k++) {
			if(max<fun(k))
				max=fun(k);
		}
		if(flag) {
			int t=i;
			i=j;
			j=t;
		}
		printf("%d %d %d\n",i,j,max);
	}
}
/*测试样例1
10 1
4 6
201 210
900 1000
*/

李小狗在做A+B Problem 的时候肚子饿了,于是他决定去买零食。

但是李小狗忘带钱了,好心的店主说,只要你能帮我把店里所有零食按价格从低到高排好序,就可以免费带走零食!

救救李小狗!

Input
输入包含多组测试。第一行输入一个整数T代表测试的个数,接下来的T行每一行包含一个整数N(1<=N<=1000),代表零食的种数,接下来N个数代表这N种零食的价格
Output
对每个测试,输出排好序的结果,输出时每一个测试的最后一个数后面没有空格,每输入完一组测试立马输出该组测试的答案
Sample Input
2
3 2 1 3
9 1 4 7 2 5 8 3 6 9

Sample Output
1 2 3
1 2 3 4 5 6 7 8 9

#include "bits/stdc++.h"
using namespace std;
int a[1010];
int comp(const void*a,const void*b) {
	return *(int*)a-*(int*)b;
}
int main() {
	int n,t;
	cin>>t;
	for(int k=0; k<t; k++) {
		cin>>n;
		for(int i=0; i<n; i++) {
			cin>>a[i];
		}
		qsort(a,n,sizeof(int),comp);
		for(int i=0; i<n-1; i++) {
			cout<<a[i]<<' ';
		}
		cout<<a[n-1]<<endl;
	}
	return 0;
}
/*测试样例
2
3 2 1 3
9 1 4 7 2 5 8 3 6 9
*/
/*结果
1 2 3
1 2 3 4 5 6 7 8 9
*/

从桌子的边缘开始放置木块,木块伸出桌子长度的计算方法为ans=1/2+1/3+……1/n,现在给定你木块伸出桌子的长度,请你求出木块的个数n

Input
1.00
3.71
0.04
5.19
0.00
Output
3 card(s)
61 card(s)
1 card(s)
273 card(s)

#include "bits/stdc++.h"
using namespace std;

int main() {
	double ans,sum;
	int i;
	do {
		cin>>ans;
		i=2;
		sum=0;
		while(ans>sum) {
			sum+=1.0/(i++);
		}
		if(i-2!=0)printf("%d card(s)\n",i-2);
	} while((ans-0.0)>0.0001);
	return 0;
}
/*测试样例
1.00
3.71
0.04
5.19
0.00
*/
/*结果
3 card(s)
61 card(s)
1 card(s)
273 card(s)
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值