<pre class="cpp" name="code">#include <iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include "algorithm"
#include "queue"
#define INF 100000000
using namespace std;
char h[100002], b[400002], e[400002];
void solve()
{
int n;
scanf("%d", &n);
int i = 0;
char** s = (char**)malloc(sizeof(char*)*n);
char** m = (char**)malloc(sizeof(char*)*n * 4);
char** e = (char**)malloc(sizeof(char*)*n);
while (i < n)
{
s[i] = (char*)malloc(sizeof(char)* 100000);
m[i] = (char*)malloc(sizeof(char)* 400000);
e[i] = (char*)malloc(sizeof(char)* 100000);
scanf("%s", s[i++]);
}
for (int i = 0; i < n; i++)
{
int k = 0;
int temp;
for (int j = strlen(s[i]) - 1; j >= 0; j--)
{
if (s[i][j] >= 'A')
temp = s[i][j] - 'A' + 10;
else
temp = s[i][j] - '0';
while (temp != 0)
{
m[i][k++] = (char)temp % 2 + '0';
temp = temp / 2;
}
}
m[i][k] = '\0';
//8
int cnt = 1;
int l = 0;
int x = 0;
for (int j = 0; j<strlen(m[i]); j++)
{
x += (m[i][j] - '0') * cnt;
if (cnt == 4 || j == strlen(m[i]) - 1)
{
e[i][l++] = x + '0';
cnt = 1;
x = 0;
}
else
{
cnt *= 2;
}
}
e[i][l] = '\0';
}
for (int i = 0; i < n; i++)
{
for (int j = strlen(e[i]) - 1; j >= 0; j--)
{
printf("%c", e[i][j]);
}
puts("\n");
}
}
void solve2()
{
int n;
scanf("%d", &n);
int i = 0;
char s[100002], c[400002], e[100002];
while (i < n)
{
scanf("%s", s);
int temp;
int k = 0;
for (int j = strlen(s) - 1; j >= 0; j--)
{
if (s[j] >= 'A')
temp = s[j] - 'A' + 10;
else
temp = s[j] - '0';
for (int m = 0; m < 4; m++)
{
c[k++] = temp % 2 + '0';
temp /= 2;
}
}
c[k] = '\0';
int cnt = 1;
int x = 0;
int l = 0;
for (int j = 0; j<strlen(c); j++)
{
x += (c[j] - '0') * cnt;
if (cnt == 4 || j == strlen(c) - 1)
{
e[l++] = x + '0';
cnt = 1;
x = 0;
}
else
{
cnt *= 2;
}
}
e[l] = '\0';
l--;
while (l >= 0 && e[l] == '0') l--;//去掉前导0
if (l<0) printf("0");
for (; l >= 0; l--)
{
printf("%c", e[l]);
}puts("\n");
i++;
}
}
int correct(int argc, char*argv[]) {
// freopen("E:\\in.txt","r",stdin);
// freopen("E:\\out.txt","w",stdout);
int n;
scanf("%d", &n);
while (n--)
{
scanf("%s", h);
int i, len = 0;
for (i = strlen(h) - 1; i >= 0; i--)//先把16进制化成二进制
{
int v;
if (h[i] >= '0'&&h[i] <= '9') v = h[i] - '0';
else v = h[i] - 'A' + 10;
for (int j = 0; j<4; j++)
{
b[len++] = v % 2 + '0';
v /= 2;
}
}
b[len] = '\0';
//printf("%s\n",b);
int x = 0, cnt = 1;
int l = 0;
for (i = 0; i<len; i++)
{
if (cnt == 4 || i == len - 1)//每三位二进制转成一位8进制,最后不足三位补0
{
x = cnt*(b[i] - '0') + x;
cnt = 1;
// printf("%d %d\n",x,i);
e[l++] = x + '0';
x = 0;
}
else
{
x = cnt*(b[i] - '0') + x;
cnt *= 2;
}
}
i = l - 1;
while (i >= 0 && e[i] == '0') i--;//去掉前导0
if (i<0) printf("0");
for (; i >= 0; i--)
{
printf("%c", e[i]);
}
printf("\n");
}
return 0;
}
int main()
{
freopen("in.txt", "r", stdin);
solve2();
return 0;
}
2、给定圆的半径r,求圆的面积。
#include<stdio.h>
#include<stdlib.h>
#define PI 3.14159265358979323//宏定义
int main()
{
int r;
double s;
scanf("%d", &r);
printf("%.7f", (PI*r*r));
return 0;
}
3、序列求和
#include<stdio.h>
#include<stdlib.h>
long long solve(long long n)
{
return (1 + n)*n / 2;
}
int main()
{
long long n;
long long result;
scanf("%I64d", &n);
result = solve(n);
printf("%I64d", result);
return 0;
}
大数采用long long %I64输入输出,关注输入数据的范围
4、排序
void sort(int a[],int n)
{
int j;
for (int i = 0; i < n-1; i++)
{
int k = i;
for (j = i+1; j < n; j++)
{
if (a[j] < a[k])
{
k = j;
}
}
int temp;
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
#include<stdio.h>
#include<stdlib.h>
void solve()
{
int n;
//int a[100];
int i = 0;
scanf("%d", &n);
int *a = (int*)malloc(sizeof(int)*n);//动态分配内存
while (i < n)
{
scanf("%d", &a[i++]);
}
for (int i = 0; i < n-1; i++)
{
int temp = i;
int k;
for(int j = i; j < n;j++)
{
if (a[j]<a[temp])
temp = j;
}
k = a[i];
a[i] = a[temp];
a[temp] = k;
}
for (int i = 0; i < n; i++)
{
printf("%d", a[i]);
}
}
int main()
{
freopen("in.txt", "r", stdin);
solve();
return 0;
}
4、10进制-》16进制
/*问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,
所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
*/
#include<cstdio>
#include<iostream>
#include<string.h>
void solve1()
{
char p[100000];
int n;
scanf("%d", &n);
int i = 0;
if (n == 0)//注意临界条件
{
printf("0");
return;
}
while (n != 0)
{
p[i++] = (n % 16>=10)?(n%16-10+'A'):(n%16+'0');
n = n / 16;
}
i--;
while (i >= 0)
{
printf("%c", p[i--]);
}
}
5、进制转换
<div>/*问题描述</div><div>
</div><div> 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。</div><div>
</div><div>样例输入</div><div>
</div><div>FFFF</div><div>
</div><div>样例输出</div><div>
</div><div>65535
*/</div>
<div>#include<cstdio>
#include<iostream>
#include<string.h>
void wrong()
{
char p[9];
long long sum = 0;
scanf("%s", p);
int cnt = 1;
for (int i = strlen(p) - 1; i >= 0; i--)
{
if (p[i] <= '9'&& p[i] >= '0')
sum += cnt*(p[i] - '0');
else
sum += cnt*(p[i] - 'A' + 10);
cnt *= 16;
}
printf("%lld", sum);
}
void right()
{
char p[9];
long long sum = 0;
scanf("%s", p);</div><div>
</div><div> for (int i = 0;i<= strlen(p) - 1; i++)
{
if (p[i] <= '9'&& p[i] >= '0')
sum = sum*16+(p[i] - '0');
else
sum = sum*16+(p[i] - 'A' + 10);
}
printf("%lld", sum);
}
int main()
{
freopen("input.txt", "r", stdin);
right();
return 0;
}</div>
6、回文数生成
#include<cstdio>
#include<iostream>
#include<string.h>
/*问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1 <= n <= 54。*/
// 基础练习 回文数
#include <stdio.h>
#include <string.h>
int right()
{
int i = 0, j = 0, len = 0;
char buf[5]; //枚举
for (i = 1000; i < 10000; ++i)
{
sprintf(buf, "%d", i);
len = strlen(buf);
for (j = 0; j < len / 2; ++j)
{
if (buf[j] != buf[len - 1 - j])//非回文 跳出
{
break;
}
}
if (j == len / 2)//满足条件
{
printf("%dn", i);
}
}
return 0;
}
void sum(int n, int num,int *s)
{
if (num * 9 < n || n<num)
return;
if (num == 1)
{
s[0] = n;
printf("%d", n);
return;
}
//int *s = (int*)malloc(sizeof(int)*num);
if (num % 2 == 0)
{
for (int i = 0; i < 10; i++)
{
s[num / 2] = i;
if ((n - 2 * i)%2==0)
{
sum((n - 2 * i) , num - 2, s);
puts("\n");
}
}
}
else
{
for (int i = 0; i < 10; i++)
{
s[num / 2] = i;
if ((n - i) % 2 == 0)
{
sum((n - i) , num -1, s);
puts("\n");
}
}
}
}
void easy(int n)
{
char a[7];
bool check = true;
int s = 0;
for (int i = 10000; i < 1000000; i++)//遍历而不是生成
{
s = 0;//循环变量的初始化
check = true;
sprintf(a, "%d", i);
for (int j = 0; j < strlen(a); j++)
{
if (a[j] != a[strlen(a) - 1 - j])
check = false;
s += a[j]-'0';
}
if (check == true &&s == n)
printf("%d\n", i);
}
}
void solve()
{
int n;
scanf("%d", &n);
easy(n);
}
int main()
{
freopen("input.txt", "r", stdin);
solve();
return 0;
}
7、四位十进制回文数生成
#include<stdio.h>
#include<stdlib.h>
void solve()
{
for (int i = 1000; i < 10000; i++)
{
char s[5];
sprintf(s, "%d", i);
int j = 0;
for (; j < 2; j++)
{
if (s[j] != s[3 - j])
break;
}
if (j == 2)
printf("%d\n", i);
}
}
int main()
{
solve();
return 0;
}
8、杨辉三角
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void solve()
{
int n;
scanf("%d", &n);
int c[50] = {0,1,0};
int p[50];
for (int i = 1; i <= n; i++)
{
p[0] = 0;//p[0] = 0是结束符
int j;//确定需要变量的个数
for (j = 1; j < i + 1;j++)
{
p[j] = c[j - 1] + c[j];
printf("%d ", p[j]);
}
p[j++] = 0;
printf("\n");
for (int k = 0; k <= i + 2; k++)
{
c[k] = p[k];
}
}
}
int main()
{
//freopen("input.txt", "r", stdin);
while (true)
{
solve();
}
return 0;
}
8、整数查找
/*问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void solve()
{
int n;
scanf("%d", &n);
int m;
int a[1001];
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &m);
int i;
for (i = 1; i <= n; i++)//循环结束的条件,等号的选取
{
if (a[i] == m)
{
printf("%d", i);
break;
}
}
if (i == n+1)
printf("-1");
}
int main()
{
freopen("input.txt", "r", stdin);
//while (true)
{
solve();
}
return 0;
}
9、数组特征
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void solve()
{
int n;
scanf("%d", &n);
int m;
int a[10001];
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
int i,max = a[1],min = a[1],j,k,temp,sum = 0;//变量初始化
for (i = 1; i <= n; i++)
{
if (max < a[i])
max = a[i];
if (min>a[i])
min = a[i];
sum += a[i];
}
cout << max << endl;
cout << min << endl;
cout << sum << endl;
}
int main()
{
freopen("input.txt", "r", stdin);
//while (true)
{
solve();
}
return 0;
}
10、字母图形
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void solve()
{
int n,m;
scanf("%d %d", &n,&m);
char a[26];
char b[26];
char c[26];
char *pre, *cur;
for (int i = 0; i < m; i++)
{
a[i] = 'A' + i;
}
a[m] = 0;
cout<<a<<endl;
pre = a;
for (int i = 0; i < n-1; i++)
{
b[0] = 'B' + i;
b[1] = 0;
strcat(b, a);
b[m] = 0;
strcpy(a, b);
cout << b << endl;
}
}
int main()
{
freopen("input.txt", "r", stdin);
//while (true)
{
solve();
}
return 0;
}
11、01字符串
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void solve()
{
char pre[6] = "00000";
char cur[6] ="00000";
cout << cur << endl;
while (strcmp(cur, "11111") != 0)
{
if (pre[4] == '0')
cur[4] = '1';
else
{
int i;
for (i = 4; i >= 0; i--)
{
if (pre[i] == '1')
cur[i] = '0';
else
break;//连续
}
cur[i] = '1';
}
cout << cur << endl;
strcpy(pre, cur);
}
}
int main()
{
freopen("input.txt", "r", stdin);
//while (true)
{
solve();
}
return 0;
}
12、闰年
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void solve()
{
int n;
scanf("%d", &n);
if (n % 4 == 0 && n % 100 != 0)
cout << "yes";
else if (n % 400 == 0)
cout << "yes";
else
cout << "no";
}
int main()
{
//freopen("input.txt", "r", stdin);
//while (true)
{
solve();
}
return 0;
}