openjudge是一个在线编程平台,非常适合初学者学习基础的编程语法,笔者将做过的C/C++语言题目答案汇总在下文,供各位参考。题目链接如下:http://cxsjsxmooc.openjudge.cn/2021t1summer2/
001:输出第二个整数
#include<stdio.h>
int main(void)
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d",b);
return 0;
}
002:字符菱形
#include<cstdio>
int main()
{
char a;
a=getchar();
printf(" %c\n",a);
printf(" %c%c%c\n",a,a,a);
printf("%c%c%c%c%c\n",a,a,a,a,a);
printf(" %c%c%c\n",a,a,a);
printf(" %c\n",a);
return 0;
}
003:打印ASCII码
#include<cstdio>
int main()
{
char a;
scanf("%c",&a);
printf("%d",a);
return 0;
}
004:打印字符
#include <iostream>
using namespace std;
int main(){
int n; //声明变量。
cin >> n; //输入字母。
cout << (char)n; //输出强转为char类型的变量(即该字母的ASCII码值)。
return 0;
}
005:整型数据类型存储空间大小
#include<stdio.h>
int main()
{
printf("%d %d\n",sizeof(int),sizeof(short));
return 0;
}
006:浮点型数据类型存储空间大小
#include<stdio.h>
int main()
{
float a;
double b;
printf("%d %d\n",sizeof(a),sizeof(b));
return 0;
}
007:对齐输出
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%8d %8d %8d",a,b,c);
return 0;
}
008:输出保留12位小数的浮点数
#include<stdio.h>
int main()
{
double a;
scanf("%lf",&a);
printf("%.12f",a);
return 0;
}
009:空格分隔输出
#include<stdio.h>
int main()
{
char a;
int b;
float c;
double d;
scanf("%c\n",&a);
scanf("%d\n",&b);
scanf("%f\n",&c);
scanf("%lf",&d);
printf("%c %d %f %lf",a,b,c,d);
return 0;
}
010:计算球的体积
#include<stdio.h>
#include<stdlib.h>
int main()
{
double r;
double v;
scanf("%lf",&r);
v=(4.0)/(3.0)*3.14*r*r*r;
printf("%.2lf",v);
return 0;
}
011:大象喝水
#include<stdio.h>
int main()
{
int r,h,m;
double v,n;
scanf("%d %d",&h,&r);
v=(3.14159)*r*r*h;
m=int(20000/v)+1;
printf("%d",m);
return 0;
}
012:奇偶数判断
#include<stdio.h>
int main()
{
int r;
scanf("%d",&r);
if(r%2==1)
{
printf("odd");
}
else{printf("even");}
return 0;
}
013:求一元二次方程的根
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double a, b, c, x1, x2, bb, fourac, twoa;
cin >> a >> b >> c;
bb = b*b;
fourac = 4*a*c;
twoa = -b/(a*2);
if (b == 0) twoa = 0;
if (bb == fourac) {
cout << fixed << setprecision(5) << "x1=x2=" << twoa << endl;
}
else if (bb > fourac) {
x1 = (-b + sqrt(b*b-4*a*c))/(2*a);
x2 = (-b - sqrt(b*b-4*a*c))/(2*a);
cout << fixed << setprecision(5) << "x1=" << x1 << ";x2="
<< fixed << setprecision(5)<< x2 << endl;
}
else {
cout << fixed << setprecision(5) << "x1=" << twoa << "+"
<< fixed << setprecision(5)<< sqrt(fourac-bb)/(a*2) << "i;x2="
<< fixed << setprecision(5) << twoa << "-"
<< fixed << setprecision(5) << sqrt(fourac-bb)/(a*2) << "i" << endl;
}
return 0;
}
014:点和正方形的关系
#include<stdio.h>
int main()
{
int x,y;
scanf("%d %d",&x,&y);
if(x>=-1&&x<=1&&y>=-1&&y<=1)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
015:苹果和虫子2
#include <iostream>
using namespace std;
int main()
{
int n,x,y,t;
cin>>n>>x>>y;
if(y%x!=0)
{
t=n-(int)(y/x)-1;
}
else
{
t=n-(int)(y/x);
}
if(t>0)
cout<<t<<endl;
else
cout<<0<<endl;
return 0;
}
016:简单计算器
#include <iostream>
using namespace std;
int main()
{
int a,b;
char ch;
cin>>a>>b>>ch;
if((ch=='+')||(ch=='-')||(ch=='*')||(ch=='/'))
{
switch (ch)
{
case '+':
cout<<a+b<<endl;
break;
case '-':
cout<<a-b<<endl;
break;
case '*':
cout<<a*b<<endl;
break;
case '/':
{
if(b==0) cout<<"Divided by zero!"<<endl;
else cout<<a/b<<endl;
}
}
}
else cout<<"Invalid operator!"<<endl;
return 0;
}
017:求整数的和与均值
#include <stdio.h>
int main(int argc, char *argv[]) {
int n=0,a=0,sum=0;
scanf("%d",&n);
int count=n;
while(n!=0)
{
scanf("%d",&a);
sum+=a;
n--;
}
printf("%d %.5f",sum,(double)(sum)/count);
return 0;
}
018:整数序列的元素最大跨度值
#include <stdio.h>
#include <math.h>
int main() {
int m,n,max=0,min=100;
int i,j;
scanf("%d\n",&n);
for(i=1;i<=n;i++)
{
scanf("%d ",&m);
if(max<m) //找出最大值
max=m;
if(min>m) //找出最小值
min=m;
}
j=max-min;
printf("%d\n", j);
return 0;
}
019:奥运奖牌计数
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n,a,b,c,d;
a=0;b=0;c=0;
scanf("%d",&n);
int x[n-1];
int y[n-1];
int z[n-1];
for(i=0;i<n;i++)
{
scanf("%d %d %d",&x[i],&y[i],&z[i]);
a=a+x[i];
b=b+y[i];
c=c+z[i];
}
d=a+b+c;
printf("%d %d %d %d",a,b,c,d);
return 0;
}
020:乘方计算
#include<stdio.h>
int main()
{
int a,n,i,sum=1;
scanf("%d %d",&a,&n);
for(i=0;i<n;i++)
sum=sum*a;
printf("%d",sum);
return 0;
}
021:鸡尾酒疗法
#include <cstdio>
int main()
{
int n,a,b;
float x,y;
scanf("%d",&n);
scanf("%d%d",&a,&b);
x=(float)b/a;
for(int i=2; i<=n; i++){
scanf("%d%d",&a,&b);
y=(float)b/a;
if((y-x)>0.05){
printf("better\n");
}else{
if((x-y)>0.05){
printf("worse\n");
}else{
printf("same\n");
}
}
}
return 0;
}
022:角谷猜想
#include<stdio.h>
int main()
{
unsigned long long i;//可能不够长 所以得长长整型无符号
scanf("%lld",&i);
while(i!=1)
{
if(i%2==0&&i>=0)//偶数
{
printf("%lld/2=",i);//改为unsigned long long要注意同时修改修饰符
i=i/2;
printf("%lld\n",i);
}
else if(i%2!=0&&i>=0)//奇数
{
printf("%lld*3+1=",i);
i=i*3+1;
printf("%lld\n",i);
}
}
printf("End");
return 0;
}
023:正常血压
#include <stdio.h>
int main()
{
int g,a,b,c=0,d,r,m=0,n=0,h;
double l,q,x,y,v;
scanf("%d",&h);
for(a=1;a<=h;a++){
scanf("%d%d",&g,&r);
if(g>=90&&g<=140&&r>=60&&r<=90){
m++;
}
else {
if(c<m)c=m;
m=0;
}
}
if(c<m)c=m;
printf("%d",c);
}
024:数字反转
#include <stdio.h>
int main() {
int a, b=0 ;
scanf("%d", &a);
if (a == 0) { // a为0
printf("0");
return 0;
}else if (a < 0) { // a为负数
a = -a;
printf("-");
}
while (b == 0) { // 去除末尾所有0
b = a % 10;
if (b == 0)
a = a / 10;
}
while (a != 0) {
b = a % 10;
a = a / 10;
printf("%d", b);
}
}
025:求特殊自然数
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main(){
int a,b,c;
for(a=1;a<=6;a++){
for(b=0;b<=6;b++){
for(c=1;c<=6;c++){
int k = a*49+b*7+c;
int n = c*81+b*9+a;
if(k==n)
{
printf("%d\n",k);
printf("%d%d%d\n",a,b,c);
printf("%d%d%d\n",c,b,a);
}
}
}
}
return 0;
}
026:雇佣兵
#include<cstdio>
int main()
{
int m, n, x;
scanf("%d %d %d", &m, &n, &x);
while(x > 0) {
int t = m/n;//需要m/n个元素
if(m % n)
t++;
if(x < t)
break;
x -= t;//x-=m/n
t = m/n;
n += t;//n+=m/n
}
printf("%d\n", n);
return 0;
}
027:数字统计
#include <iostream>
using namespace std;
int main()
{
// 0.定义变量及输入数据
int L,R,N=0,k;
cin >> L >> R;
// 1.循环处理从L到R的每个数字i
for (int i=L;i<=R;i++){
// 2.循环处理数字k中的每一位,判断是否为2
k = i;
while (k > 0){
if (k%10 == 2) N++;
k = k / 10; // 判断数字k的下一位
}
}
// 3.输出结果
cout << N << endl;
return 0;
}
028:与指定数字相同的数的个数
#include<stdio.h>
int main()
{
int i,n,m,x;
x=0;
scanf("%d\n",&n);
int a[n-1];
for(i=0;i<n;i++)
{
scanf("%d ",&a[i]);
}
scanf("%d\n",&m);
for(i=0;i<n;i++)
{
if(a[i]==m)
{
x++;
}
else{
}
}
printf("%d",x);
return 0;
}
029:陶陶摘苹果
#include<stdio.h> //头文件
int appleNum();
//主函数
int main(void){
printf("%d",appleNum());//调用函数
return 0;
}
int appleNum(){
/*
a:当做输入数据时的变量 max:存放陶陶伸手够到的最大高度
num:记陶陶够到的苹果数 数组b存放十个数据
*/
int i,a,max,num=0,b[10];
char c; //字符c用来接收回车字符
for(i=0;i<10;i++){
scanf("%d",&a); //输入数据
b[i]=a; //把输入的数据存在数组b中
if( (c=getchar())=='\n' ){ //判断输入的是否是回车,若是回车则终止输入
break;
}
}
scanf("%d",&a); //再次输入数据
max=a+30; //陶陶伸手够到的最大高度,此时需要加上凳子的长度
//下面for循环是用来判断陶陶能够到的苹果数
for(i=0;i<10;i++){
if(max>=b[i]){
num++;
}
}
return num; //返回陶陶够到的苹果数
}
030:年龄与疾病
#include<stdio.h>
int main()
{
int i, n,a = 0, b = 0, c = 0, d = 0, k;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &k);
if (k <= 18 && k >= 0) a++;
else if (k <= 35) b++;
else if (k <= 60) c++;
else if (k > 60) d++;
}
printf("%0.2lf%%\n%0.2lf%%\n%0.2lf%%\n%0.2lf%%\n", (double)a / n*100, (double)b / n * 100, (double)c / n * 100,(double)d / n * 100);
return 0;
}
031:校门外的树
#include<stdio.h>
int main(){
int L,M; //L路长,L+1是数目多少,M代表区域数目
scanf("%d%d",&L,&M);
int num[10000+1]; //0-10000 能容纳的最多的树木
int i,j;
for(i=0;i<10001;i++){
num[i]=0; //将所有数目标记为 0;
}
int start,end; //区域的 开始与结束
for(i=0;i<M;i++){
scanf("%d%d",&start,&end);
for(j=start;j<=end;j++){
num[j]=1; //如果是区域中的值 就标记为1 重复也不怕1=1不影响
}
}
int sum=0;//计算被标记的树
for(i=0;i<10001;i++){
if(num[i]==1){
sum = sum+1;
}
}
printf("%d",L+1-sum); //一共L+1棵树-被标记过的就是剩下的
return 0;
}
032:计算鞍点
#include <iostream>
using namespace std;
int main()
{
int A[5][5], n=5, i, j;
for (i=0; i<5; i++)
for (j=0; j<5; j++)
cin >> A[i][j];
bool flag = 0;
int row, col;
for (row=0; row<n; row++)
{
col = 0;
for (j=1; j<n; j++){//查找第row行最大值的列号
if (A[row][j] > A[row][col])
col = j;
}
flag = 1;
for (i=0; i<n; i++){//查找第col列最小值的行号,确定A[row][col]是否为鞍点
if (A[i][col] < A[row][col]){//A[row][col]不是鞍点
flag = 0;
break;
}
}
if (flag) //A[row][col]是鞍点
break;
}
if (flag)
cout << row+1 << " " << col+1 << " " << A[row][col] << endl;
else
cout << "not found" << endl;
return 0;
}
033:图像模糊处理
#include<iostream>
#include<cmath>
using namespace std;
int a[1001][1001];
double b[1001][1001];
int main()
{
int m,n;
int i,j;
cin>>n>>m;//输入图像行数、列数
for(i=1;i<=n;i++)//输入每个像素点灰度
for(j=1;j<=m;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(i==1||i==n||j==1||j==m)//边界灰度不变
b[i][j]=a[i][j];
else//内部按要求求平均
b[i][j]=round((a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5.0);//按要求用round()四舍五入
}
}
for(i=1;i<=n;i++)//输出模糊后的图像
{
for(j=1;j<=m;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
return 0;
}
034:矩阵转置
#include<stdio.h>
using namespace std;
int a[1001][1001];
int main()
{
int m,n,i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
scanf("%d",&a[i][j]);
for(i=1;i<=m;++i)
{
for(j=1;j<=n;++j)
printf("%d ",a[j][i]);
printf("\n");
}
return 0;
}
035:Pell数列
int pell[1000001],a[100000];//要开得足够大
int main()
{
int k,n,i,j;
scanf("%d",&n);
for(j=1;j<=n;j++)
{
scanf("%d",&k);
pell[1]=1;
pell[2]=2;
for(i=3;i<=k;i++)//从第三位开始模拟
{
pell[i]=pell[i-2]+2*pell[i-1];//an=2*an-1+an-2
pell[i]%=32767;//每次都对这个数列中的数取余,防止过大
}
a[j]=pell[k];
}
for(j=1;j<=n;j++)
printf("%d\n",a[j]);
}
036:求最大公约数问题
#include <stdio.h>
int main()
{
int n1, n2, i, gcd;
scanf("%d %d", &n1, &n2);
for(i=1; i <= n1 && i <= n2; ++i)
{
// 判断 i 是否为最大公约数
if(n1%i==0 && n2%i==0)
gcd = i;
}
printf("%d", gcd);
return 0;
}
037:编程填空:第i位替换
#include <iostream>
using namespace std;
int bitManipulation1(int n, int m, int i) {
return ((m>>i)&1) == 1? (n|(1<<i)) : (n&(~(1<<i)));
}
int main() {
int n, m, i, t;
cin >> t;
while (t--) {
cin >> n >> m >> i;
cout << bitManipulation1(n, m, i) << endl;
}
return 0;
}
038:编程填空:第i位取反
#include <iostream>
using namespace std;
int bitManipulation2(int n, int i) {
return (1<<i)^n;
}
int main() {
int t, n, i;
cin >> t;
while (t--) {
cin >> n >> i;
cout << bitManipulation2(n, i) << endl;
}
return 0;
}
039:编程填空:左边i位取反
#include <iostream>
using namespace std;
int bitManipulation3(int n, int i) {
return (-1 << (32 - i)) ^ n;
}
int main() {
int t, n, i;
cin >> t;
while (t--) {
cin >> n >> i;
cout << bitManipulation3(n, i) << endl;
}
return 0;
}
040:统计数字字符个数
#include<stdio.h>
int main()
{
char x;
int i=0;
while(scanf("%c",&x),x!='\n')//回车符作为输入结束的标志
{
if(x>='0'&&x<='9')
{
i++;//记录数字字符个数
}
}
printf("%d",i);
return 0;
}
041:找第一个只出现一次的字符
#include<cstdio>
#include<cstring>
using namespace std;
char ch[100000];
int s=0;
int main()
{
scanf("%s",ch);
for(int i=0;i<strlen(ch);i++)
{
s=0;
for(int j=0;j<strlen(ch);j++)
{
if(ch[i]==ch[j])
s++;
}
if(s==1)
{
printf("%c",ch[i]);
return 0;
}
}
printf("no");
}
042:石头剪子布
#include <iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
char a[100][10],b[100][10];
cin>>n;
for (int i=0;i<n;i++)
{
cin>>a[i];
cin>>b[i];
}
for (int i=0;i<n;i++)
{
int l1=strlen(a[i]);
int l2=strlen(b[i]);
if (l1==l2)
cout<<"Tie"<<endl;
else
{
if (l1==4)
{
if (l2==5)
cout<<"Player2"<<endl;
else
cout<<"Player1"<<endl;
}
else if(l1==5)
{
if (l2==4)
cout<<"Player1"<<endl;
else
cout<<"Player2"<<endl;
}
else
{
if (l2==4)
cout<<"Player2"<<endl;
else
cout<<"Player1"<<endl;
}
}
}
return 0;
}
043:最长最短单词
#include <stdio.h>
#include <string.h>
#define N 20010
char s[N];
int main()
{
int len,max_len=-1,min_len=101;
int max_pos=-1,min_pos=-1;
int i,count=0;
gets(s);
len=strlen(s);
for(i=0; ;i++)
{
if(i==len || s[i]==' ' || s[i]==',')
{
if(count > max_len)
{
max_len=count;
max_pos=i-count;
}
if(count!=0 && count < min_len)
{
min_len=count;
min_pos=i-count;
}
s[i]='\0';
count=0;
if(i==len)
break;
}
else
{
count++;
}
}
printf("%s\n",&s[max_pos]);
printf("%s\n",&s[min_pos]);
return 0;
}
044:密码翻译
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int main()
{
char a[81];
int len;
gets(a);
len=strlen(a);
for (int i=0;i<len;i++)
{
if(((a[i]>='A')&&(a[i]<='Z'))||((a[i]>='a')&&(a[i]<='z')))
{
if((a[i]=='z')||(a[i]=='Z'))
a[i]=a[i]-25;
else
a[i]=a[i]+1;
}
}
for(int i=0;i<len;i++)
cout<<a[i];
return 0;
}
045:指针练习:输出Hello
#include <iostream>
using namespace std;
int main() {
char s[] = "Hello";
char * p;
for(
p=s;*p!='\0';p++
)
cout << * p ;
return 0;
}
046:指针练习:输出Tesla
#include <iostream>
using namespace std;
void Print(const char * p1, const char * p2)
{
for(
;p1<p2;p1++
)
cout << * p1;
}
int main()
{
const char * s = "Tesla123";
Print(s,s+5);
cout << endl;
Print(s,s+3);
cout << endl;
return 0;
}
047:指针练习:ForEach
#include <iostream>
using namespace std;
void ForEach(void * a, int width, int num,
void (*f)(void *)
)
{
for(int i = 0;i < num; ++i)
f((char*)a+width*i);
}
void PrintSquare(void * p)
{
int * q = (int*)p;
int n = *q;
cout << n * n << ",";
}
void PrintChar(void * p) {
char * q = (char*)p;
cout << *q << ",";
}
int main()
{
int a[5] = {1,2,3,4,5};
char s[] = "hello!";
ForEach(a,sizeof(int),5,PrintSquare);
cout << endl;
ForEach(s,sizeof(char),6,PrintChar);
return 0;
}
048:指针练习:Memcpy之一
#include <iostream>
using namespace std;
void Memcpy(char * src,char * dest,int n)
{
while(n--)//到0结束循环,这里的n指的是数组src的长度
*dest++ = *src++;
}
int Strlen(char * s)
{
int i;
for( i = 0; s[i]; ++i);
return i;
}
int main()
{
int a;
char s1[30];
char s2[30];
int t;
cin >> t;
for(int i = 0;i < t; ++i) {
cin >> a;
int b = 99999999;
Memcpy((char*)&a,(char *) &b,sizeof(int));
cout << b << endl;
}
for(int i = 0;i < t; ++i) {
cin >> s1;
Memcpy(s1,s2,Strlen(s1)+1);
cout << s2 << endl;
}
return 0;
}
049:指针练习:double
#include <iostream>
using namespace std;
void Double(int * p, int n)
{
for(int i = 0;i < n; ++i)
p[i] *= 2;
}
int main()
{
int a[3][4] = { { 1,2,3,4},{5,6,7,8},
{ 9,10,11,12 } };
Double(
a[1], 6
);
for(int i = 0;i < 3; ++i) {
for(int j = 0; j < 4; ++j)
cout << a[i][j] << ",";
cout << endl;
}
return 0;
}
050:指针练习:Memcpy之二
#include <iostream>
using namespace std;
void Memcpy( void * src, void * dest, int size)
{
char *psrc=(char*)src;
char *pdest=(char*)dest;
for(int i=size-1;i>=0;i--){
*(pdest+i)=*(psrc+i);
}
}
void Print(int * p,int size)
{
for(int i = 0;i < size; ++i)
cout << p[i] << ",";
cout << endl;
}
int main()
{
int a[10];
int n;
cin >> n;
for(int i = 0;i < n; ++i)
cin >> a[i];
int b[10] = {0};
Memcpy(a,b,sizeof(a));
Print(b,n);
int c[10] = {1,2,3,4,5,6,7,8,9,10};
Memcpy(c,c+5,5*sizeof(int)); //将c的前一半拷贝到后一半
Print(c,10);
char s[10] = "123456789";
Memcpy(s+2,s+4,5); //将s[2]开始的5个字符拷贝到s[4]开始的地方
cout << s << endl;
char s1[10] = "123456789";
Memcpy(s1+5,s1+1,4); //将s1[5]开始的4个字符拷贝到s1[1]开始的地方
cout << s1 << endl;
return 0;
}
051:指针练习:MyMax
#include <iostream>
using namespace std;
void * MyMax(void *p,int size,int n,int (*f)(void *,void *)){
char * p1=(char *)p;
for(int i=0;i<n;i++){
if(f(p1,(char *)p+size*i)<0){
p1=(char *)p+size*i;
}
}
return p1;
}
int Compare1(void * n1,void * n2)
{
int * p1 = (int * )n1;
int * p2 = (int * )n2;
return ((*p1)%10) - ((*p2)%10);
}
int Compare2(void * n1,void * n2)
{
int * p1 = (int * )n1;
int * p2 = (int * )n2;
return *p1 - *p2;
}
#define eps 1e-6
int Compare3(void * n1,void * n2)
{
float * p1 = (float * )n1;
float * p2 = (float * )n2;
if( * p1 - * p2 > eps)
return 1;
else if(* p2 - * p1 > eps)
return -1;
else
return 0;
}
int main()
{
int t;
int a[10];
float d[10];
cin >> t;
while(t--) {
int n;
cin >> n;
for(int i = 0;i < n; ++i)
cin >> a[i];
for(int i = 0;i < n; ++i)
cin >> d[i];
int * p = (int *) MyMax(a,sizeof(int),n,Compare1);
cout << * p << endl;
p = (int *) MyMax(a,sizeof(int),n,Compare2);
cout << * p << endl;
float * pd = (float * )MyMax(d,sizeof(float),n,Compare3);
cout << * pd << endl;
}
return 0;
}
052:指针练习:指向指针的指针
#include <iostream>
using namespace std;
int main()
{
int x,y,z;
x = 10;
y = 20;
z = 30;
int * a[3] = { &x, &y,&z};
for(
int *(*p)=a;
p < a + 3; ++p)
cout<< * (*p) << endl;
return 0;
}
053:指针练习:SwapMemory
#include <iostream>
using namespace std;
void SwapMemory(void * m1,void * m2, int size)
{
char p;
char *q1=(char*)m1;
char *q2=(char*)m2;
for (int i=0;i<size;i++){
p=*(q1+i);
*(q1+i)=*(q2+i);
*(q2+i)=p;
m1=q1;
m2=q2;
}
}
void PrintIntArray(int * a,int n)
{
for(int i = 0;i < n; ++i)
cout << a[i] << ",";
cout << endl;
}
int main()
{
int a[5] = {1,2,3,4,5};
int b[5] = {10,20,30,40,50};
SwapMemory(a,b,5 * sizeof(int));
PrintIntArray(a,5);
PrintIntArray(b,5);
char s1[] = "12345";
char s2[] = "abcde";
SwapMemory(s1,s2,5);
cout << s1 << endl;
cout << s2 << endl;
return 0;
}
054:成绩排序
#include<iostream>
#include<cstring>
using namespace std;
#define maxSize 21
struct student
{
char name[maxSize];
int score;
};
int main()
{
struct student s[maxSize],temp;
int n;
cin>>n;
for(int i=0; i<n; i++)
cin>>s[i].name>>s[i].score;
//冒泡排序
for(int i=0; i<n-1; i++){
for(int j=0; j<n-i-1; j++){
if(s[j].score<s[j+1].score){
temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
if(s[j].score==s[j+1].score && strcmp(s[j].name,s[j+1].name)>0){
temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
for(int i=0; i<n; i++)
cout<<s[i].name<<" "<<s[i].score<<endl;
return 0;
}
055:分数线划定
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 5000
struct a {
int no, a;
} a[N];
int cmp(const void* p1, const void* p2)
{
if((*(struct a*)p2).a == (*(struct a*)p1).a)
return (*(struct a*)p2).no < (*(struct a*)p1).no;
else
return (*(struct a*)p2).a > (*(struct a*)p1).a;
}
int main(void)
{
int n, m, i;
scanf("%d%d", &n, &m);
for(i=0; i<n; i++)
scanf("%d%d", &a[i].no, &a[i].a);
qsort(a, n, sizeof(struct a), cmp);
m = floor(m * 1.5);
for(i=m; i<n; i++)
if(a[i].a == a[i-1].a)
m++;
else
break;
printf("%d %d\n", a[m - 1].a, m);
for(i=0; i<m; i++)
printf("%d %d\n", a[i].no, a[i].a);
return 0;
}
056:病人排队
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
struct bingren
{
string id; //记录id
int age; //记录年龄
int que; //记录登记先后顺序
}b[202];
bingren t;
int n,q=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>b[i].id>>b[i].age;
q++;
b[i].que=q; //记录谁先输入
}
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(b[i].age>=60&&b[i].age<b[j].age) //对年龄大于60岁的进行排序
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
else if(b[i].age==b[j].age&&b[i].que>b[j].que) //如果年龄相同,按登记先后顺序排序
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
for(int i=0;i<n;i++) //先输入年龄大于60
{
if(b[i].age>=60)
{
cout<<b[i].id<<endl;
}
}
for(int i=0;i<n;i++) //后输入年龄小于60
{
if(b[i].age<60)
{
cout<<b[i].id<<endl;
}
}
return 0;
}
057:mysort
#include <iostream>
using namespace std;
struct A {
int nouse1;
int nouse2;
int n;
};
void mysort(void* a,int n,int width,int(*f)(const void* e1,const void* e2))
{
for(int i=n-1;i>=0;--i)
for(int j=0;j<i;++j)
{
char* aj=(char*)a+j*width;
char* aj1=(char*)a+(j+1)*width;
if(f(aj,aj1)>0)
{
for(int k=0;k<width;k++)
{
char temp=aj[k];
aj[k]=aj1[k];
aj1[k]=temp;
}
}
}
}
int MyCompare1( const void * e1,const void * e2)
{
int * p1 = (int * ) e1;
int * p2 = (int * ) e2;
return * p1 - * p2;
}
int MyCompare2( const void * e1,const void * e2)
{
int * p1 = (int * ) e1;
int * p2 = (int * ) e2;
if( (* p1 %10) - (* p2 % 10))
return (* p1 %10) - (* p2 % 10);
else
return * p1 - * p2;
}
int MyCompare3( const void * e1,const void * e2)
{
A * p1 = (A*) e1;
A * p2 = (A*) e2;
return p1->n - p2->n;
}
int a[20];
A b[20];
int main ()
{
int n;
while(cin >> n) {
for(int i = 0;i < n; ++i) {
cin >> a[i];
b[i].n = a[i];
}
mysort(a,n,sizeof(int),MyCompare1);
for(int i = 0;i < n; ++i)
cout << a[i] << "," ;
cout << endl;
mysort(a,n,sizeof(int),MyCompare2);
for(int i = 0;i < n; ++i)
cout << a[i] << "," ;
cout << endl;
mysort(b,n,sizeof(A),MyCompare3);
for(int i = 0;i < n; ++i)
cout << b[i].n << "," ;
cout << endl;
}
return 0;
}
058:从字符串中取数
#include <iostream>
#include <iomanip>
using namespace std;
double GetDoubleFromString(char * str)
{
static char *p=str;//**************静态本地变量的使用
if(str)//******************静态本地变量的赋值
p = str;
while(*p&&!(*p>='0'&&*p<='9')){
p++;
}
if(!*p){
return -1;
}
double num=0;
while(*p>='0'&&*p<='9'){
num=num*10+*p-'0';
p++;
}
if(*p=='.'){
int i=10;
p++;
while(*p>='0'&&*p<='9'){
num=num+(double)(*p-'0')/i;
i*=10;
p++;
}
}
return num;
}
int main()
{
char line[300];
while(cin.getline(line,280)) {
double n;
n = GetDoubleFromString(line);
while( n > 0) {
cout << fixed << setprecision(6) << n << endl;
n = GetDoubleFromString(NULL);
}
}
return 0;
}
059:sort简单题
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[8] = {6,5,14,23,2,9,87,10 };
sort(
a+1, a+7, greater<int>()
);
for(int i = 0;i < 8; ++i)
cout << a[i] << "," ;
return 0;
}
060:还是sort简单题
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
struct Point{
int x;
int y;
};
struct Rule1
{
bool operator()(const int &a1,const int &a2)
{
if(a1%10<a2%10)
return true;
else if(a1%10==a2%10&&a1>a2)
return true;
else
return false;
}
};
struct Rule2
{
bool operator()(const Point &a,const Point &b)
{
if(a.x*a.x+a.y*a.y==b.x*b.x+b.y*b.y)
{
if(a.x==b.x)
return a.y<b.y;
else
return a.x<b.x;
}
else return a.x*a.x+a.y*a.y<b.x*b.x+b.y*b.y;
}
};
int main()
{
int a[8] = {6,5,55,23,3,9,87,10 };
sort(a,a+8,Rule1());
for(int i = 0;i < 8; ++i)
cout << a[i] << "," ;
cout << endl;
Point ps[8] = {{1,0},{0,1},{0,-1},{-1,0},{1,-1},{1,1},{2,0},{-2,0} } ;
sort(ps,ps+8,Rule2());
for(int i = 0;i < 8; ++i)
cout << "(" << ps[i].x << "," << ps[i].y << ")";
return 0;
}
061:Set
#include <iostream>
#include <set>
#include <string>
#include <iterator>
using namespace std;
int main()
{
multiset<int> mset;
set<int> mm;
char commend[5];
int i, n, num, amount;
multiset<int>::iterator it;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> commend >> num;
switch (commend[1])
{
case 'd':
mset.insert(num);
mm.insert(num);
cout << mset.count(num) << endl;
break;
case 'e':
cout << mset.count(num) << endl;
mset.erase(num);
break;
case 's':
if (mm.find(num) == mm.end())
cout << "0 0" << endl;
else
{
cout << "1 ";
cout << mset.count(num) << endl;
}
break;
}
}
return 0;
}
062:热血格斗场
#include<bits/stdc++.h>
using namespace std;
map<int,int>c;
map<int,int>::iterator k;
int n,i,a,b,id,v;
bool ok;
int main(){
scanf("%d",&n);
c[1e9]=1;
for(i=1;i<=n;i++){
scanf("%d%d",&id,&v);
k=c.upper_bound(v);
if(k==c.end()){
k--;
ok=true;
}
a=k->first-v;
b=k->second;
if(k!=c.begin()&&ok==false){
k--;
if(v-k->first<=a)
b=k->second;
}
printf("%d %d\n",id,b);
c[v]=id;
}
return 0;
}
063:冷血格斗场
#include<iostream>
#include<map>
#include<cmath>
#include <cstdio>
using namespace std;
multimap<int,int> MEMBER;
multimap<int,int>::iterator i,a1,a2;
int n;
int id;
int power;
//有相同战斗力的,只保留id最小的那个就行了
int main(){
scanf("%d",&n);
MEMBER.insert(make_pair(1000000000,1));
while(n--){
scanf("%d%d",&id,&power);
if(MEMBER.find(power)!=MEMBER.end()){ //如果有相同值
i=MEMBER.find(power); //找到该值
if (id < i->second){ //新的id更小
printf("%d %d\n",id,i->second); //输出
MEMBER.erase(i->first); //擦除老的
MEMBER.insert(make_pair(power,id)); //更新新的
}
else
printf("%d %d\n",id,i->second); //新的id更大,则直接输出比赛
}
//无相同值
else{
i=MEMBER.insert(make_pair(power,id)); //插入
if(i==MEMBER.begin()){ //插入的位置是头
printf("%d %d\n",id,(++i)->second); //输出头的下一个
}
else if(i==(--MEMBER.end())){ //插入的位置是尾
printf("%d %d\n",id,(--i)->second); //输出尾的上一个
}
else{
a1=--i;
++i;
a2=++i;
if(abs(power-a1->first)<abs(power-a2->first)){ //a1距离更近
printf("%d %d\n",id,a1->second);
}
else if(abs(power-a1->first)>abs(power-a2->first)){ //a2距离更近
printf("%d %d\n",id,a2->second);
}
else{ //距离相同
if(a1->second<a2->second) //a1id更小
printf("%d %d\n",id,a1->second);
else
printf("%d %d\n",id,a2->second); //a2id更小
}
}
MEMBER.insert(make_pair(power,id)); //入组
}
}
}