目录
促销计算
反序数
转进制
10 进制转 x 进制代码(x<10
10 进制转 x 进制(通用版
x 进制转 10 进制(x 为 2 时)
x 进制转 10 进制(通用版
x 进制转 y进制
排版类问题
字符棱形
解法一
解法二
杨辉三角形
日期类问题
题目一
题目二
加密算法
#: 850 1230 5000 3560
#: discount=1,pay=850
discount=0.95,pay=1168.5
discount=0.8,pay=4000
discount=0.85,pay=3026
#include
#include //万能头文件
using namespace std;
int main (){
double a;
scanf("%lf",&a);
if (a < 1000) printf("discount = 1 , pay = %g\n" , a);
if (a >= 1000 && a< 2000) printf("discount = 0.95,pay = %g\n" , a*0.95);
if (a >= 2000 && a< 3000) printf("discount = 0.9,pay = %g\n" , a*0.9);
if (a >= 3000 && a< 5000) printf("discount = 0.85,pay = %g\n" , a*0.85);
if (a >= 5000 ) printf("discount = 0.8,pay = %g\n" , a*0.8);
return 0;
}
#include
#include //万能头文件
int main() {
int n;
scanf("%d", &n);
int ans = 0;//将反序之后的答案存在这里
//将 n 逐位分解
while (n > 0) {
ans *= 10;
ans += (n % 10);//得到个位
n /= 10;//再缩小一位
}
printf("%d\n", ans);
return 0;
}
#include
#include //万能头文件
int main() {
int n,x;//输入数n(十进制)和要转换的x进制
int s[105] ;
scanf("%d%d",&n,&x) ;
//数组下标
int cnt = 0;
//将n逐位分解
while(n < 10){
//获取数n的个位
int w = (n % x);
s[cnt++] = w;
//数n减少一位
n /= x;
}
//反序输出
for(int i = cnt - 1;i>= 0;i--){
printf("%d",s[i]);
}
printf("\n");
return 0;
}
#include
#include //万能头文件
int main() {
int n,x;//输入数n(十进制)和要转换的x进制
char s[105] ;//十进制以上有字符,用char
scanf("%d%d",&n,&x) ;
//数组下标
int cnt = 0;
//将n逐位分解
while(n < 10){
//获取数n的个位
int w =(n % x) ;
if(w<10) s[cnt++] = w + '0';//转换为字符+‘0’
//如果大于10则从A字符开始
else s[cnt++] = (w - 10) + 'A';//转换为小写则加‘a ’
//数n减少一位
n /= x;
}
//反序输出
for(int i = cnt -1;i>=0;i++){
printf("%c",s[i]);
}
printf("\n");
return 0;
}
#include
#include
int main() {
char s[105];
//输入二进制字符串
scanf("%s",&s);
int len = strlen(s);
int ans = 0;
for (int i = 0;i
#include
#include
int main() {
char s[105];
int x;
//输入x进制字符串和代表的进制x
scanf("%s%d",&s,&x);
int len = strlen(s);
int ans = 0;
for (int i = 0;i ='0' && s[i]<='9') ans += (s[i] - '0')
else ans += (s[i] - 'A') + 10;
}
printf("%d\n",ans);
return 0;
}
#include
#include
int main() {
char s[105];
int x,y;
//输入二进制字符串和代表的进制x 以及要转换的进制y
scanf("%s%d%d",&s,&x,&y);
int len = strlen(s);
int ans = 0;
for (int i = 0;i ='0' && s[i]<='9') ans += (s[i] - '0');
else ans += (s[i] - 'A') + 10;}
char out[105];
int cnt = 0;
while(ans>0){
int w = ans % y;
if (w<10) out[cnt++] = w +'0';
else out[cnt++] = (w - 10) + 'A';
ans /= y ;
}
for (int i = cnt - 1;i>=0;i--){
printf("%c",out[i]);
}
printf("\n");
return 0;
}
*
***
*****
***
*
对于这类题目,可以将它进行分解。从中间切开,上面一个三角形,下面一个 三角形。问题就转化为了如何输出三角形,利用两个 for 循环控制来输出三角形
#include
#include
int main() {
//n
int n;
scanf("%d", &n);
//上三角
for (int i = 1; i <= n; i++) {
//先打印空白
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
//再打印*
for (int j = n - i + 1; j < n + i; j++) {
printf("*");
}
printf("\n");
}
//下三角 下三角只需要将上三角反过来输出就行
for (int i = n - 1; i >= 1; i--) {
//先打印空白
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
//再打印*
for (int j = n - i + 1; j < n + i; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
#include
int main()
{
char c;
scanf("%c", &c);
printf(" %c\n", c);
printf(" %c%c%c\n", c, c, c);
printf("%c%c%c%c%c\n", c, c, c, c, c);
printf(" %c%c%c\n", c, c, c);
printf(" %c", c);
return 0;
}
- 只需要按照题意用二维数组去计算即可。
- 对于任意 一个数 a[i][j],都有 a[i][j] = a[i-1][j] + a[i-1][j-1]
- C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功
#include
#include
int main() {
int a[21][12] = {0};
int n;//行数
while(scanf("%d",&n) != EOF){
if(n==0) break;
a[1][1] = 1;
for (int i = 2;i<=n;i++){//从第二行开始迭代,第一行只有一个数1
for (int j = 1;j < i;j++){#迭代列
a[i][j] = a[i-1][j] + a[i-1][j-1];//计算每个元素
}
}
//遍历行列进行打印
for(int i = 1;i<=n;i++){
for (int j = 1;j < i;j++){
printf("%d",a[i][j]);
}
printf("\n");
}
return 0;
}
}
题目描述: 定义一个结构体变量(包括年、月、日),编程序,要求输入年月日,计算并输出该日在本年中第几天。
输入描述: 输入三个整数(并且三个整数是合理的,既比如当输入月份的时候应该在 1 至 12 之间,不应该超过这个范围),否则输出 Input error!
输出描述: 输出一个整数.既输入的日期是本月的第几天。
输入样例:
1985 1 20
2006 3 12
输出样例:
20
71
#include
#include
struct node{
int year,month,day ;
}p;
int f[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main()
{
while(scanf("%d%d%d",&p.year,&p.month,&p.day) != EOF)
{
if((p.year%4==0) ||(p.year%400==0)&&(p.year%100!=0))
{
f[2] = 29;
}
else f[2] = 28 ;
int flag = 0;
//判断月份
if (p.month<1 || p.month>12) flag = 1;
//判断天数是否合法
for(int i = 1;i<12;i++)
{
if(p.day < 0 || p.day > f[i])
{
flag = 1;
}
}
if (flag)
{
printf("Input error!\n");
continue;
}
int ans = p.day;
for (int i = 1; i < p.month; i++)
{
ans += f[i];
}
printf("%d\n", ans);
}
return 0;
}
今天是2012年4月12日星期四,编写程序,输入今天开始到12月31日之间的任意日期,输出那一天是星期几。例如输入“5(回车)20(回车)”(5月20日),输出应为“Sunday”。
输入第一行为月份。 输入第二行为这个月的第几天。
输入这一天是星期几。
5 20
Sunday
#include
#include
#include
#include
using namespace std;
struct node{
int year,month,day ;
}p;
int f[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
string s[7] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
int main()
{
string end1;
int ans = 0;
cin>>p.month>>p.day;
//如果是四月
if(p.month==4)
{
ans = p.day - 12;
}
//如果是四月以后
else if(p.month >=5 || p.month <=13)
{
for(int i = 5; i
#include
#include
int main() {
char s[105];
gets(s);//输入一行文本用gets
int len = strlen(s);
for (int i = 0;i='A'&& s[i]<='Z'){
s[i] += 3;
}
if (s[i]>'Z') s[i]-= 26;
else if(s[i]>='a'&& s[i]<='z'){
s[i] += 3;
if (s[i]>'z') s[i]-= 26;
}
else{
continue;
}
}
puts(s);
return 0;
}