1、地址转换
事实上,Excel提供了两种地址表示方法,还有一种表示法叫做RC格式地址。 第12行第4列表示为:“R12C4”,第5行第255列表示为“R5C255”。
你的任务是:编写程序,实现从RC地址格式到常规地址格式的转换。
【输入、输出格式要求】
用户先输入一个整数n(n<100),表示接下来有n行输入数据。
接着输入的n行数据是RC格式的Excel单元格地址表示法。
程序则输出n行数据,每行是转换后的常规地址表示法。
例如:用户输入:
2
R12C4
R5C255
则程序应该输出:
D12
IU5
【注意】
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main ( ) { int n; cin>>n; while(n--) { string str; char ch [10]= {'0'},count=0; cin>>str; int len=str.length(); int i=1,row=0,list=0; while(str[i]<='9'&&str[i]>='0' ) { row=row*10+str[i]-'0'; i++; } i++; while(i<len) { list=list*10+str[i]-'0'; i++; } // cout<<row<<' '<<list<<endl; while(list>=26) { ch[count]=(char)('A'+list/26-1); count ++; list%=26; } ch[count++]=(char)('A'+list-1); for(int i=0; i<count; i++) cout<<ch[i]; printf("%d\n",row); } return 0; }
猜算式
看下面的算式:
□□ x □□ = □□ x □□□
它表示:两个两位数相乘等于一个两位数乘以一个三位数。
如果没有限定条件,这样的例子很多。
但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。
该算式中1至9的每个数字出现且只出现一次!
比如:
46 x 79 = 23 x 158
54 x 69 = 27 x 138
54 x 93 = 27 x 186
.....
请编程,输出所有可能的情况!
注意:
左边的两个乘数交换算同一方案,不要重复输出!
不同方案的输出顺序不重要
就是一个简单的全排,然后用到的一个重要算法就是暴力破解,重要思想。。。
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main (){ int a[]={1,2,3,4,5,6,7,8,9},mark=0; int temp[20][4]={0},coun=0; while(next_permutation(a,a+9)){ for(int i=0;i<coun;i++){ if(a[0]==temp[i][0]&&a[1]==temp[i][1]&&a[2]==temp[i][2]&&a[3]==temp[i][3]){ mark=1; break; } } if(mark) { mark = 0;continue;} if((a[0]*10+a[1])*(a[2]*10+a[3])==(a[4]*10+a[5])*(a[6]*100+a[7]*10+a[8])){ printf("%d%d x %d%d = %d%d x %d%d%d\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]); temp[coun][0] = a[2],temp[coun][1] = a[3],temp[coun][2] = a[0],temp[coun++][3] = a[1]; } } return 0; }
不过后来想想好像会超时的,应该还是会有时间限制的吧,所以又写了个新的算法,这样的话只要确定了前面的六位最后面的也就确定了,感觉应该比上面的一个快多了吧,恩恩,还不错...
#include <stdio.h> #include <memory.h> #include <iostream> #include <algorithm> using namespace std; void judge(int a,int b,int c,int d){ int temp[10]={0}; temp[a/10]++,temp[a%10]++; temp[b/10]++,temp[b%10]++; temp[c/10]++,temp[c%10]++; temp[d/100]++,temp[d%100/10]++,temp[d%10]++; for(int i=1;i<=9;i++) if(temp[i]==0||temp[i]==2) return ; printf ("%d x %d = %d x %d\n",a,b,c,d); } int main (){ for(int i=12;i<=98;i++){//第一个数 if(i%11==0||i%10==0) continue ; for(int j=i;j<=98;j++){//第二个数 if(j%11==0||j%10==0) continue ; for(int x=12;x<=98;x++){//第三个数 if(x%11==0||x%10==0) continue; if(i*j%x!=0) continue; //如果第四个数不存在,跳一次 if( !(i*j/x<=987&&i*j/x>=100) ) continue; //如果第四个数的范围不是三位数 ,跳过<pre name="code" class="cpp"> judge(i,j,x,i*j/x); } } } return 0; }串的处理在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:1. 把每个单词的首字母变为大写。2. 把数字与字母之间用下划线字符(_)分开,使得更清晰3. 把单词中间有多个空格的调整为1个空格。例如:用户输入:you and me what cpp2005program则程序输出:You And Me What Cpp_2005_program用户输入:this is a 99cat则程序输出:This Is A 99_cat我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。假设用户输入的串长度不超过200个字符。
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main (){ string str="",str1=""; char ch; while(~scanf("%c",&ch)&&ch!='\n') str+=ch; int len = str.length(); if(str[0]<='9'&&str[0]>='0') str1+=str[0]; else str1+=(char)str[0]-32; for(int i=1;i<len;i++){ if(str[i-1]==' '&&str[i]<='z'&&str[i]>='a') str1+=(char)str[i]-32; else if(str[i-1]<='z'&&str[i-1]>='a'&&str[i]<='9'&&str[i]>='0') str1=str1+'_'+str[i]; else if(str[i]<='z'&&str[i]>='a'&&str[i-1]<='9'&&str[i-1]>='0') str1=str1+'_'+str[i]; else if(str[i-1]==' '&&str[i]==' ') continue; else str1+=str[i]; } cout<<str1; return 0; }
取字符
从标准输入读入一个由字母构成的串(不大于30个字符)。
从该串中取出3个不重复的字符,求所有的取法。
取出的字符,要求按字母升序排列成一个串。
不同的取法输出顺序可以不考虑。
例如:
输入:
abc
则输出:
abc
输入:
abcd
则输出:
abc
abd
acd
bcd
输入:
abcaa
则输出:
abc
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main (){ string str; char ch[35],coun = 0; cin>>str; int len = str.length(); for(int i=0;i<len;i++){ int mark=0; for(int j=0;j<i;j++) if(str[i]==str[j]) mark=1; if(mark==1) continue; ch[coun++]=str[i]; } // sort(ch,ch+coun); for(int i=0;i<coun-2;i++) for(int j=i+1;j<coun-1;j++) for(int z=j+1;z<coun;z++) cout<<ch[i]<<ch[j]<<ch[z]<<endl; return 0; }